import type { ArrayToMap, EnumInit, EnumInitOptions, EnumKey, EnumValue, IEnum, ValueTypeFromSingleInit } from './types';
/**
 * **EN:** Generate an enum collection, the enum value supports `number` and `string` types, and the
 * enum name supports localization solutions
 *
 * **CN:** 生成一个枚举集合，枚举值支持`number`和`string`类型，枚举名称支持本地化方案
 *
 * @example
 *   const Week = Enum({
 *     Sunday: { value: 0, label: 'Sunday' },
 *     Monday: { value: 1, label: 'Monday' },
 *   } as const);
 *
 * @param init the init object, see usage examples for the way to pass values | 初始化对象，传值方式参见使用示例
 *
 * @returns Enum collection | 枚举集合
 */
export declare function Enum<T extends EnumInit<K, V>, K extends EnumKey<T> = EnumKey<T>, V extends EnumValue = ValueTypeFromSingleInit<T[K], K>>(init: T, options?: EnumInitOptions<T, K, V>): IEnum<T, K, V> & EnumExtension<T, K, V>;
/**
 * **EN:** Generate an enum based on an object array
 *
 * **CN:** 基于对象数组生成枚举
 *
 * @example
 *   const Week = Enum([
 *     { value: 0, label: 'Sunday', key: 'Sun' },
 *     { value: 1, label: 'Monday', key: 'Mon' },
 *   ] as const);
 *
 * @param init Init objects array | 初始化对象数组
 * @param options Generate options | 生成选项
 *
 * @returns Enum collection | 枚举集合
 */
export declare function Enum<A extends Record<string, unknown>[] | readonly Record<string, unknown>[], K extends EnumKey<ArrayToMap<A>> = EnumKey<ArrayToMap<A>>, V extends EnumValue = ValueTypeFromSingleInit<ArrayToMap<A>[K], K>>(init: A, options?: EnumInitOptions<A[number], K, V>): IEnum<ArrayToMap<A>, K, V> & EnumExtension<ArrayToMap<A>, K, V>;
export declare namespace Enum {
    export var localize: (content: "enum-plus.options.all" | (string & {}) | undefined) => any;
    var _a: (obj: Record<string, unknown> | undefined) => void;
    export { _a as extends };
}
