前言
项目里面经常用到一些下拉框
尝试封装一个比较好用的Enum
文件目录
├── utils.ts
├── index.txs
└── package.josn
代码
utils.ts
class Enum {
static keys: string[];
static values: Enum[];
/**
* call this function after declare all staic enum variable
*/
static closeEnum(): void;
/**
* convert raw enum name to enum instance
* @param key key(name) of enum member
*/
static ofKey<T extends Enum>(key: string): T | undefined;
/**
* convert raw enum value to enum instance
* @param value value of enum member
*/
static of<T extends Enum>(value: string): T | undefined;
/**
* get { label, value } array
*/
static options(): {
label: string;
value: string;
}[];
key: string;
index: number;
value: string;
label: string;
toString(): string;
}
export class Status extends Enum {
static operating = new Status('01', '运营中')
static waiting = new Status('02', '等待中')
static debugging = new Status('03', '调试中')
static _ = MachineStatusAll.closeEnum()
constructor(value: string, label: string) {
super()
this.value = value
this.label = label
}
}
index.tsx
import { Status } from './utils
useEffect(() => {
console.log(Status.options())
console.log(Status.of('03'))
console.log(Status.ofKey('debugging'))
}, [])
输出结果