告别繁琐!这个 TypeScript 枚举库让你的代码更优雅

告别繁琐!这个 TypeScript 枚举库让你的代码更优雅

在 TypeScript 开发中,枚举(Enum)是我们常用的工具之一,它能让我们定义一组命名常量,提高代码的可读性和可维护性。然而,原生的 TypeScript 枚举却存在一些令人头疼的问题,比如功能单一、扩展性差,导致我们在实际开发中不得不花费额外的精力去处理一些重复且繁琐的工作。今天,我要给大家介绍一个神器 —— @jsonlee_12138/enum,它将彻底解决这些痛点,让你的枚举使用体验焕然一新!

一、原生枚举的痛点:功能单一,维护成本高

你是否遇到过这样的场景:

  • 想要为枚举成员添加标签(如用于前端显示的友好名称),但原生枚举只能存储值,无法关联额外信息,只能手动维护一个并行的标签对象。

  • 需要生成用于下拉列表等场景的选项数组(包含值、标签、额外属性),每次都要手动遍历枚举并组装数据,代码冗余且容易出错。

  • 希望枚举值自动递增以减少重复输入,但原生枚举在未显式赋值时会产生反向映射问题,导致类型安全隐患。

  • 项目中存在多个枚举,每个都需要单独维护对应的字典(值到标签的映射)和选项数组,维护成本高且难以统一管理。

这些问题不仅让代码变得臃肿,还增加了出错的概率,尤其是在团队协作中,不一致的枚举处理方式可能导致沟通成本上升。

二、@jsonlee_12138/enum:一站式解决枚举痛点

@jsonlee_12138/enum是一个专门为 TypeScript 打造的枚举工具库,它在原生枚举的基础上进行了全方位升级,提供了类型安全、标签支持、额外属性、自动递增值、内置选项和字典生成等强大功能,让你无需再为枚举的扩展性和维护性烦恼。

三、核心功能解析:重新定义枚举使用方式

1. 轻松创建多功能枚举

通过Enum.create方法,你可以在定义枚举时直接添加标签(label)和额外属性(extra),无需额外维护其他数据结构:

import Enum from '@jsonlee_12138/enum';
const Status = Enum.create({
  PENDING: Enum.Item(0, '待处理'), // 值0,标签"待处理",无额外属性
  PROCESSING: Enum.Item(1, '处理中'),
  COMPLETED: Enum.Item(2, '已完成', { color: 'green' }) // 额外属性{ color: 'green' }
});

每个枚举成员都是一个包含value、label、extra的对象,直接访问相关属性:

console.log(Status.PENDING.label); // "待处理"
console.log(Status.COMPLETED.extra.color); // "green"

2. 自动递增值,减少重复输入

如果不指定值,枚举值会自动从 0 开始递增,无需手动填写每个成员的值:

const Colors = Enum.create({
  RED: Enum.Item(),    // value: 0
  GREEN: Enum.Item(),  // value: 1
  BLUE: Enum.Item()    // value: 2
});

3. 内置选项和字典,无需手动生成

库中内置了options和dict属性,分别提供枚举成员的数组形式和值到标签的映射,直接使用即可:

// options:包含所有成员的value、label、extra,适用于下拉列表等场景
console.log(Status.options);
/* 输出:
[
  { value: 0, label: '待处理', extra: undefined },
  { value: 1, label: '处理中', extra: undefined },
  { value: 2, label: '已完成', extra: { color: 'green' } }
]
*/
// dict:值到标签的映射,方便快速查找标签
console.log(Status.dict);
/* 输出:
{
  '0': '待处理',
  '1': '处理中',
  '2': '已完成'
}
*/

4. 类型安全与不可变性

  • 类型安全:枚举成员的类型被严格定义,避免使用原生枚举时可能出现的类型错误。

  • 不可变性:枚举一旦创建就不可修改,确保数据的一致性和安全性。

  • 防重复值:如果尝试定义重复的值,库会在编译时报错,提前发现问题。

5. 便捷的成员检查

通过has方法可以轻松检查某个成员是否存在,避免运行时错误:

console.log(Status.has('PENDING')); // true
console.log(Status.has('DONE')); // false

四、为什么选择@jsonlee_12138/enum?

特性 原生枚举 @jsonlee_12138/enum
标签支持 不支持 内置label属性
额外属性 不支持 支持extra属性
自动递增值 有限支持 完全支持,无反向映射问题
选项数组(options) 需手动生成 内置options属性
值到标签字典(dict) 需手动生成 内置dict属性
类型安全性 一般 严格类型检查
不可变性 不支持 完全不可变

五、快速上手:3 分钟安装与使用

1. 安装

# 使用 npm
npm install @jsonlee_12138/enum --save
# 使用 yarn
yarn add @jsonlee_12138/enum
# 使用 pnpm
pnpm add @jsonlee_12138/enum

2. 基本使用流程

  • 导入Enum类

  • 使用Enum.create创建枚举,每个成员通过Enum.Item定义(值、标签、额外属性)

  • 直接访问成员的value、label、extra

  • 使用options获取选项数组,dict获取值到标签的映射

  • 通过has方法检查成员是否存在

六、适用场景

  • 前端开发:下拉列表、状态显示等需要值和标签对应场景

  • 后端开发:接口返回状态码、错误码等需要统一管理的场景

  • 全栈项目:需要跨前后端共享枚举定义,确保数据一致性

  • 团队协作:统一枚举处理方式,减少沟通成本和维护成本

七、贡献与反馈

@jsonlee_12138/enum开源免费,采用 MIT 许可证,欢迎大家提交issue反馈问题或提出需求,也可以通过pull request贡献代码,共同完善这个库!

结语

如果你受够了原生枚举的局限性,想要更优雅、更高效地管理枚举,那么@jsonlee_12138/enum绝对是你的不二之选。它通过简洁的 API 和强大的功能,让枚举的定义和使用变得前所未有的简单,同时保证了类型安全和可维护性。

现在就点击链接安装体验吧,让我们一起告别繁琐的枚举处理,享受更高效的开发体验!

GitHub 仓库Discord 交流群

如果你觉得这个库对你有帮助,别忘了在 GitHub 上给个星⭐,让更多人发现它!

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!