type Key = string | number | symbol;
type Value = any;
type Label = string | number | undefined;
type ExtraAttrs = Record<string, any>;
type ConstantItem = readonly [Key, Value] | readonly [Key, Value, Label] | readonly [Key, Value, Label, ExtraAttrs];
type ConstantOption<T extends ConstantItem> = {
    key: T[0];
    value: T[1];
    label: T[2];
} & (T[3] extends undefined ? unknown : Partial<T[3] & Record<Key, Exclude<T[3], T[3]>>>);
type GenerateEnums<T extends readonly ConstantItem[]> = T extends readonly [infer I, ...infer U] ? U extends readonly ConstantItem[] ? GenerateEnums<U> & (I extends ConstantItem ? {
    [P in I[0]]: I[1];
} & {
    [P in I[1]]: I[2];
} : unknown) : unknown : unknown;
export declare class Constant<T extends readonly ConstantItem[]> {
    sequences: T;
    readonly options: ConstantOption<T[number]>[];
    readonly enums: GenerateEnums<T>;
    get: (key: T[number][0]) => ConstantOption<T[number]>;
    match(callback: (item: ConstantOption<T[number]>) => boolean): ConstantOption<T[number]> | undefined;
    match(value: Value): ConstantOption<T[number]> | undefined;
    match(value: Value, key: T[number][0]): ConstantOption<T[number]>;
    when: (value: Value, condition: T[number][0] | T[number][0][]) => boolean;
    extend: <R>(callback: (instance: this) => R) => this & R;
    /** @deprecated 请使用 enums */
    injectEnums: () => this & GenerateEnums<T>;
    constructor(sequences: T);
}
export {};
