枚举值工具 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 类型 |