1.0.4 • Published 6 months ago
@jsonlee_12138/enum v1.0.4
TypeScript Enum
介绍
@jsonlee_12138/enum 是一个用于创建类型安全的枚举的工具库。它提供了比 TypeScript 原生 enum 更强大的功能,包括标签、额外属性、读取 options 和 dict 等特性。
安装
# 使用 npm
npm install @jsonlee_12138/enum --save
# 使用 yarn
yarn add @jsonlee_12138/enum
# 使用 pnpm
pnpm add @jsonlee_12138/enum基础使用
import Enum { type EnumValue, type EnumValues } from '@jsonlee_12138/enum';
// 创建枚举
const Status = Enum.create({
PENDING: Enum.Item(0, '待处理'),
PROCESSING: Enum.Item(1, '处理中'),
COMPLETED: Enum.Item(2, '已完成', { color: 'green' })
});
// 使用枚举
console.log(Status.PENDING.value); // 0
console.log(Status.PENDING.label); // '待处理'
console.log(Status.PENDING.extra); // undefined
console.log(Status.COMPLETED.value); // 2
console.log(Status.COMPLETED.label); // '已完成'
console.log(Status.COMPLETED.extra); // { color: 'green' }
// 类型处理
EnumValue<typeof Status> // 0 | 1 | 2
EnumValues<typeof Status> // (0 | 1 | 2)[]
// 注意: 如果没有值的时候会推断为 string | number, 因此最好加上范型, 如下
const Colors = Enum.create({
Red: Enum.Item<0>(),
Blue: Enum.Item<1>(),
Green: Enum.Item<2>(),
})自动递增
如果不指定值,枚举值会自动递增:
const Colors = Enum.create({
RED: Enum.Item(), // value: 0
GREEN: Enum.Item(), // value: 1
BLUE: Enum.Item() // value: 2
});读取 options
const Status = Enum.create({
PENDING: Enum.Item(0, '待处理'),
PROCESSING: Enum.Item(1, '处理中'),
COMPLETED: Enum.Item(2, '已完成', { color: 'green' })
});
console.log(Colors.options)
// [
// { value: 0, label: '待处理', extra: undefined },
// { value: 1, label: '处理中', extra: undefined },
// { value: 2, label: '已完成', extra: { color: 'green' } }
// ]读取 dict
const Status = Enum.create({
PENDING: Enum.Item(0, '待处理'),
PROCESSING: Enum.Item(1, '处理中'),
COMPLETED: Enum.Item(2, '已完成', { color: 'green' })
});
console.log(Colors.dict)
// {
// '0': '待处理',
// '1': '处理中',
// '2': '已完成'
// }has 方法
const Status = Enum.create({
PENDING: Enum.Item(0, '待处理'),
PROCESSING: Enum.Item(1, '处理中'),
COMPLETED: Enum.Item(2, '已完成', { color: 'green' })
});
console.log(Status.has(0)) // true
console.log(Status.has('PENDING')) // falseget 方法
const Status = Enum.create({
PENDING: Enum.Item(0, '待处理'),
PROCESSING: Enum.Item(1, '处理中'),
COMPLETED: Enum.Item(2, '已完成', { color: 'green' })
});
console.log(Status.get(0)) // {value: 0, label: '待处理', extra: undefined}特性
- 🛡️ 类型安全
- 📝 支持标签(
label) - 支持额外属性(
extra) - 自动递增值
- 🚫 防止重复值
- 不可变枚举
- 支持读取
options - 支持读取
dict
📝 贡献指南
欢迎提交issue或pull request,共同完善TypeScript Enum。
📄 许可证
MIT