UNPKG

define-enum

Version:

A utility function to define enum-like objects with TypeScript support.一个帮助定义枚举的工具函数

53 lines (52 loc) 1.64 kB
export type EnumItem = { key: string; value: string | number; label: string; disabled?: boolean; }; export type EnumItems = ReadonlyArray<EnumItem>; export type DefineEnumResult<T extends EnumItems> = { [K in T[number]['key']]: Extract<T[number], { key: K; }>['value']; } & { /** 获取所有的 key */ keys: () => T[number]['key'][]; /** 获取所有的 value */ values: () => T[number]['value'][]; /** 根据枚举值获取对应的 key */ getKey: (value: T[number]['value']) => T[number]['key'] | undefined; /** 根据枚举值获取对应的 label */ getLabel: (value: T[number]['value']) => string | number | undefined; /** 获取选项列表 */ getOptions: (config?: GetOptionsConfig) => { label: string; value: T[number]['value']; }[]; /** 判断枚举是否存在 */ has: (key: unknown) => boolean; /** 返回完整的原始枚举项数组,也就是你传入defineEnum中的数组 */ entries: () => T[number][]; }; /** * 传给 getOptions 方法的配置项,能够传入labelKey、valueKey、excludeDisabled以及其他任意的属性,方便直接透传给Select组件使用 */ export type GetOptionsConfig = { /** * 选项的 label 键名 * @default 'label' */ labelKey?: string; /** * 选项的 value 键名 * @default 'value' */ valueKey?: string; /** * 是否过滤禁用的选项,如果为true返回的options中disabled设置为true的选项会被过滤 * @default false */ excludeDisabled?: boolean; } & { [key in string]: any; };