枚举值工具 x-enum
管理枚举值的工具,支持快速获取 key、value、label,支持生成 Select 组件的 options。
提供较好的 TS 类型支持。
动机
在业务中,我们经常需要维护一些枚举值,如状态、类型,这些枚举值包含 key: 唯一键(一般为英文)、value: 值(对应后端存储的数据)、label: 中文名(用于展示)。
之前我会这样去维护这些枚举值:
1  | export enum STATUS {  | 
但是这样的维护方式有以下几个问题:
STATUS_TEXT的 key 被转为string而非number, 需要转换- 无法快速生成 Select 组件的 options
 - 根据 value 取 label 比较繁琐,需要 
STATUS_TEXT[STATUS.TODO] 
因此我总结了 B 端场景下的以下这些常见使用场景:
- select 组件的 options: 一般为 
{ label: string; value: string | number }[]这样的数据 - 根据 key 获取 value
 - 根据 key 获取 label
 - 根据 value 获取 label
 - 根据 value 获取 key
 - 获取所有的 key
 - 获取所有的 value
 - 获取所有的 label
 
该函数工具封装了以上业务场景的方法,方便维护枚举值,并且TS 支持 key 值的枚举推断
使用方式
install
1  | npm i @xliez/x-enum  | 
example
1  | import { Select } from "antd";  | 
API
xEnum(enumObj: Record<string, [number | string, string?]>)
一般情况:
1  | const TypeEnum = xEnum({  | 
如果你使用 key 作为 label:
1  | const TypeEnum = xEnum({  | 
xEnum(enumObj: Record<string, [number | string, string?]>))返回值
| 方法名 | 参数 | 返回值 | 说明 | 
|---|---|---|---|
genOptions | 
names?: [string, string] | 
{ label: string; value: string | number }[] | 
生成 select 组件 options names 参数对应生成的label value的名称,默认为 ['label', 'value'], 如果传[a, b],则生成的是 {a: string, b: value}[]类型 | 
valueByKey | 
key: string | 
number | 
根据 key 取 value | 
labelByKey | 
key: string | 
string | 
根据 key 取 label | 
labelByValue | 
value: number | 
string | 
根据 value 取 label | 
keyByValue | 
value: number | 
string | 
根据 value 取 key | 
keys | 
- | string[] | 
获取所有的 key | 
values | 
- | number[] | 
获取所有的 value | 
labels | 
- | string[] | 
获取所有的 label | 
_TYPE_ | 
- | number | string | 
获取 value 的联合类型,类似 TS 中的 enum 类型 |