create-enum-es
Version:
处理前端枚举的工具方法,支持ts类型检测
63 lines (61 loc) • 1.93 kB
TypeScript
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 };