njzscloud-dispose-web/src/common/utils/enums.ts

31 lines
742 B
TypeScript

export interface EnumItem {
val: string
txt: string
}
export type EnhancedEnum<T> = T & {
// @ts-ignore
[key in T[number]['val']]: T[number]['val']
} & {
// @ts-ignore
[key in `${T[number]['val']}Txt`]: T[number]['txt']
} & {
// @ts-ignore
of: (val: string) => T[number] | undefined
// @ts-ignore
txt: (val: T[number]['val']) => T[number]['txt']
}
export function createEnum<T>(enums: T): EnhancedEnum<T> {
const e = enums as EnhancedEnum<T>
for (let enumItem of enums as EnumItem[]) {
// @ts-ignore
e[enumItem.val] = enumItem.val
// @ts-ignore
e[enumItem.val + 'Txt'] = enumItem.txt
}
// @ts-ignore
e.of = (val: string) => ((enums as EnumItem[]).find((item) => item.val === val))
return e
}