enum-plus 是一个增强型的枚举库,完全兼容原生的 TypeScript enum,并扩展了显示文本、本地化、UI 控件绑定、枚举项遍历等强大功能。这是一个轻量级、零依赖的 TypeScript 库,可与任何前端框架配合使用。
特性
- 完全兼容原生
enum行为:支持number和string等多种数据类型。 - 增强的枚举项:可自定义显示文本,支持本地化,方便与任何 i18n 库集成。
- 丰富的 API:提供便捷的方法,如获取枚举项的显示文本、遍历枚举项、判断值是否存在等。
- UI 集成:可与 Ant Design、ElementPlus、Material-UI 等 UI 库无缝集成,仅需一行代码即可生成下拉菜单、复选框等组件。
- TypeScript 支持:提供全面的类型推断,增强开发体验。
- 轻量级:仅 2KB+,无任何依赖。
安装
使用 npm 安装:
npm install enum-plus
使用 yarn 安装:
yarn add enum-plus
枚举初始化
enum-plus 提供多种方式初始化枚举,可根据具体需求选择最适合的方式。
1. 简单的 key-value 格式
直接映射键和值,类似于原生枚举格式。
import { Enum } from 'enum-plus';
const Week = Enum({
Sunday: 0,
Monday: 1,
} as const);
console.log(Week.Monday); // 输出: 1
注意:在 TypeScript 中使用
as const类型断言,确保枚举值被视为字面量类型。如果使用 JavaScript,请移除as const。
2. 带字符串值的 key-value 格式
允许使用字符串作为值。
import { Enum } from 'enum-plus';
const Week = Enum({
Sunday: 'Sun',
Monday: 'Mon',
} as const);
console.log(Week.Monday); // 输出: 'Mon'
3. 标准格式(推荐)
包含 value 和 label,可为每个枚举项指定显示文本,适用于 UI 组件。
import { Enum } from 'enum-plus';
const Week = Enum({
Sunday: { value: 0, label: '我爱星期天' },
Monday: { value: 1, label: '我讨厌星期一' },
} as const);
console.log(Week.Sunday); // 输出: 0
console.log(Week.label(0)); // 输出: '我爱星期天'
4. 仅 label 格式
使用键作为值。
import { Enum } from 'enum-plus';
const Week = Enum({
Sunday: { label: '我爱星期天' },
Monday: { label: '我讨厌星期一' },
} as const);
console.log(Week.Sunday); // 输出: 'Sunday'
console.log(Week.label('Sunday')); // 输出: '我爱星期天'
5. 数组格式
适用于需要动态创建枚举的场景,例如从 API 数据生成枚举。
import { Enum } from 'enum-plus';
// 假设 getPetsData() 返回类似以下的数据
const petTypes = await getPetsData();
// [
// { value: 1, key: 'dog', label: '狗' },
// { value: 2, key: 'cat', label: '猫' },
// { value: 3, key: 'rabbit', label: '兔子' }
// ];
const PetTypes = Enum(petTypes);
6. 原生枚举格式
可从原生枚举创建,利用原生枚举的自增行为。
import { Enum } from 'enum-plus';
enum Init {
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
const Week = Enum(Init);
console.log(Week.Sunday); // 输出: 0
console.log(Week.Monday); // 输出: 1
console.log(Week.Saturday); // 输出: 6
console.log(Week.label('Sunday')); // 输出: 'Sunday'
API
enum-plus 提供丰富的 API,方便开发者操作和扩展枚举。
-
Enum.XXX:直接访问枚举值,类似于原生enum。console.log(Week.Sunday); // 输出: 0 console.log(Week.Monday); // 输出: 1 -
items:返回所有枚举项的只读数组,结构符合 Ant Design 组件规范,可用于生成下拉菜单、复选框等 UI 控件。 -
keys:返回所有枚举项的键名数组。 -
label(keyOrValue?: string | number): string | undefined:根据值或键获取枚举项的显示文本,支持本地化。console.log(Week.label(1)); // 输出: 'Monday' console.log(Week.label('Monday')); // 输出: 'Monday' -
key(value?: string | number): string | undefined:根据值获取枚举项的键名。console.log(Week.key(1)); // 输出: 'Monday' -
has(keyOrValue?: string | number): boolean:判断某个枚举项(值或键)是否存在。console.log(Week.has(1)); // 输出: true console.log(Week.has('Sunday')); // 输出: true console.log(Week.has(9)); // 输出: false console.log(Week.has('Birthday')); // 输出: false -
toSelect(config?: OptionsConfig): {value, label}[]:返回仅包含label和value字段的枚举项数组,可用于生成