UNPKG

create-enum-es

Version:

处理前端枚举的工具方法,支持ts类型检测

63 lines (61 loc) 1.93 kB
type IEMap = Readonly<Record<any, readonly [any, any] | readonly [any, any, any]>>; type TEUnion<T extends IEMap> = keyof T; type TEValue<T extends IEMap> = T[TEUnion<T>][0]; type IEnum<T extends IEMap> = { readonly [K in keyof T]: T[K] extends readonly [infer V, any] ? V : any; } & Enum<T>; declare class Enum<T extends IEMap> { #private; protected __enumMap__: T; protected __enumLabelMap__: any; protected __enumExtraMap__: any; /** * @param {Object} enumMap 枚举map */ constructor(enumMap: T); /** * 获取枚举值 * @param {String} key 枚举KEY * @return {Number} 枚举值 */ value(key: TEUnion<T>): TEValue<T>; /** * 获取多个枚举值 * @param {Array} param 多个枚举KEY * @return {Array} {[枚举值]} */ values(...args: TEUnion<T>[]): any | TEValue<T>[]; /** * 获取多个枚举值Map * @param {Array} param 多个枚举KEY,如果不传递则返回所有 * @return {Object} {[枚举key]:枚举值} */ options<V extends TEUnion<T>>(...args: V[]): { value: TEValue<T>; label: string; extra: any; }[]; /** * 获取枚举名称 * @param {String} keyOrVal 枚举KEY或枚举值 * @return {String} 枚举名称 */ label(keyOrVal: TEUnion<T> | TEValue<T>): string; label(keyOrVal: any): any; /** * 获取枚举关联参数 * @param {String} keyOrVal 枚举KEY或枚举值 * @return {String} 枚举名称 */ extra(keyOrVal: TEUnion<T> | TEValue<T>): any; extra(keyOrVal: any): any; /** * 检测字段类型 * @param {Number} typeVal 类型 * @param {String} typeKey 类型key * @return {Boolean} */ check(typeVal: any, typeKey: TEUnion<T>): boolean; } declare const createEnum: <T extends IEMap>(enumMap: T) => Readonly<IEnum<T>>; export { createEnum as default };