ton.enum.lib
v1.0.1
Published
A lightweight TypeScript enum library for JS/TS projects
Maintainers
Readme
EnumBase
一个 TypeScript 通用枚举类,支持动态实例化、缓存查找、JSON 序列化、下拉选项生成以及标签和值的映射。
安装
npm install ton.enum.lib或者直接在项目中引入 EnumBase.ts。
核心类
EnumItem
定义枚举项的基本结构:
export interface EnumItem {
label: string;
value: string | number;
[key: string]: any; // 可扩展额外字段
}EnumBase
核心枚举类:
export class EnumBase<T extends EnumItem = EnumItem> {
label: string;
value: string | number;
constructor({ label, value, ...extra }: T);
toJSON(): object;
// 静态方法
static values<E extends typeof EnumBase>(): readonly InstanceType<E>[];
static getLabel<E extends typeof EnumBase>(value: string | number): string | null;
static getValue<E extends typeof EnumBase>(label: string): string | number | null;
static fromValue<E extends typeof EnumBase>(value: string | number): InstanceType<E> | null;
static fromLabel<E extends typeof EnumBase>(label: string): InstanceType<E> | null;
static toSelectOptions<E extends typeof EnumBase>(): { label: string, value: string | number }[];
static toValueLabelMap<E extends typeof EnumBase>(): Record<string | number, string>;
static toLabelValueMap<E extends typeof EnumBase>(): Record<string, string | number>;
}装饰器
EnumClass
自动将静态对象实例化为 EnumBase:
import { EnumBase, EnumClass } from './EnumBase';
@EnumClass
class RoleEnum extends EnumBase {
static ADMIN = { label: "管理员", value: "admin", level: 1 };
static USER = { label: "用户", value: "user", level: 2 };
}使用示例
// 获取所有枚举实例
console.log(RoleEnum.values());
// 输出: [ RoleEnum { label: '管理员', value: 'admin', level: 1 }, RoleEnum { label: '用户', value: 'user', level: 2 } ]
// 根据 value 获取 label
console.log(RoleEnum.getLabel("admin")); // "管理员"
// 根据 label 获取 value
console.log(RoleEnum.getValue("用户")); // "user"
// 根据 value 获取完整实例
console.log(RoleEnum.fromValue("user"));
// 输出: RoleEnum { label: '用户', value: 'user', level: 2 }
// 下拉选项
console.log(RoleEnum.toSelectOptions());
// 输出: [ { label: '管理员', value: 'admin' }, { label: '用户', value: 'user' } ]
// 值到标签映射
console.log(RoleEnum.toValueLabelMap());
// 输出: { admin: '管理员', user: '用户' }
// 标签到值映射
console.log(RoleEnum.toLabelValueMap());
// 输出: { 管理员: 'admin', 用户: 'user' }特性
- ✅ 动态实例化静态对象
- ✅ 缓存查找,性能优异
- ✅ JSON 序列化友好
- ✅ 支持额外字段扩展
- ✅ 可生成前端下拉选项或映射表
类型安全
通过泛型约束 EnumItem,支持自定义字段,保持类型安全。
License
MIT
