管理枚举值的工具
在业务中,我们经常需要维护一些枚举值,如状态、类型,这些枚举值包含 key: 唯一键(一般为英文)
、value: 值(对应后端存储的数据)
、label: 中文名(用于展示)
。
之前我会这样去维护这些枚举值:
export enum STATUS {
// key -> value
TODO = 1,
PENDING = 2,
DONE = 3,
}
export const STATUS_TEXT = {
// key -> value -> label
[STATUS.TODO]: "todo",
[STATUS.PENDING]: "pending",
[STATUS.DONE]: "done",
};
但是这样的维护方式有以下几个问题:
STATUS_TEXT
的 key 被转为 string
而非 number
, 需要转换STATUS_TEXT[STATUS.TODO]
因此我总结了 B 端场景下的以下这些常见使用场景:
{ label: string; value: string | number }[]
这样的数据该函数工具封装了以上业务场景的方法,方便维护枚举值,并且TS 支持 key 值的枚举推断
npm i @xliez/x-enum
# or
yarn add @xliez/x-enum
# or
pnpm add @xliez/x-enum
import { Select } from "antd";
import { xEnum } from "@xliez/x-enum";
const TypeEnum = xEnum({
TODO: [0, "待办"],
PENDING: [1, "处理中"],
DONE: [2, "已完成"],
});
// 1. 生成 select 组件 options
const App = () => {
return (
<>
<Select label="select" name="select" options={TypeEnum.genOptions()} />
</>
);
};
// 2. 根据 key 取 value
const value = TypeEnum.TODO.value; // 支持 TS 推断
// or
const value = TypeEnum.valueByKey("TODO");
// 3. 根据 key 取 label
const label = TypeEnum.TODO.label; // 支持 TS 推断
// or
const label = TypeEnum.labelByKey("TODO");
// 4. 根据 value 取 label
const label = TypeEnum.labelByValue(0);
// 5. 根据 value 取 key
const key = TypeEnum.keyByValue(0);
// 6. 获取所有的 key
const keys = TypeEnum.keys;
// 7. 获取所有的 value
const values = TypeEnum.values;
// 8. 获取所有的 label
const labels = TypeEnum.labels;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.