TypeScript 枚举生成器
指导
TypeScript 枚举生成器
根据简单值列表生成 TypeScript 枚举、常量对象和联合类型。将您的值粘贴进来,选择命名风格并指定输出格式,即可获得带有可选 JSDoc 注释、类型守卫、反向映射以及值数组的准备就绪 TypeScript 代码。
如何使用
请在输入区域每行输入一个值或用逗号分隔输入。设置枚举名称,选择键命名风格(PascalCase、SCREAMING_SNAKE_CASE 或 camelCase),并选择输出格式。生成的代码实时更新。切换额外选项如 JSDoc 注释、导出关键字、类型守卫或值数组等,根据需求调整。点击一次即可将结果复制到剪贴板。
特征
- 多种输出格式 字符串枚举、数值枚举、常量枚举、只读对象和并置类型。
- 命名风格 Pascal大写、全大写下划线和驼峰命名风格,并带有智能标识符生成
- JavaScriptDoc 注释 可选地在每个枚举成员上方添加文档注释。
- 类型守卫生成 创建一个运行时类型守卫函数来验证值。
- 值数组 生成枚举所有值进行迭代的数组。
- 反向映射 创建一个反向查找助手以处理数值枚举。
- 智能钥匙生成 处理特殊字符、重复项、以数字开头的值以及保留字。
- Real-Time Preview .env 文件是什么,为什么使用它?
常问问题
-
TypeScript中,字符串枚举(string enum)和数值枚举(numeric enum)的区别是什么?
枚举将字符串赋值给每个成员,例如颜色.Red等于字符串RED。数值型枚举默认从0开始递增编号,因此Color.Red等于0,Color.Blue等于1。字符串枚举在调试时更易读,因为日志和网络请求中的值是可阅读的。数值型枚举稍微更加紧凑,并且原生支持反向映射,这意味着你可以通过数字查找名称。大多数现代TypeScript项目倾向于使用字符串枚举以提高清晰度。
-
在何时应使用 `const enum` 与普通枚举(enum)? **注意:** 请确认是否需要更详细解释或技术性说明。
常量枚举在编译时完全内联。TypeScript 编译器会将每个常量枚举成员的引用替换为其字面值,因此运行时不会存在任何枚举对象。这能生成更小的打包文件并提高执行速度。然而,常量枚举不能迭代(无法使用 `Object.values`),不支持反向映射,并且在库代码中可能会出现声明文件问题。在希望零运行时开销的内部应用程序常数场景下,请使用常量枚举;当需要迭代值或发布库时,请使用普通枚举。
-
**as const 对象是什么,以及它与枚举(enum)的区别是什么?** 什么是 `as const` 对象? `as const` 是一个用于将 JavaScript 对象或数组强制转换为只读模式的语法元素。当对象被赋予 `as const` 时,其内部属性也会变成只读的,这意味着它们不能被修改。 **与枚举(enum)的区别:** 1. **作用域和类型**: - 枚举(enum)是一种用于定义一组常量值的语法结构。在 JavaScript 中,`enum` 是一个特殊的变量声明方式,通常用于表示一组相关的标识符。 - `as const` 对象并不是枚举类型,而是通过限制对象属性的可修改性来实现数据不变性。 2. **使用场景**: - 枚举(enum)通常用于表示一组固定值,例如状态、选项等。在 TypeScript 中,`enum` 可以帮助开发者更好地管理和理解代码中的常量。 - `as const` 对象主要用于确保数据的不变性,适合在需要严格保持对象结构不变的场景中使用。 3. **运行时行为**: - 枚举(enum)在运行时是动态的,可以通过修改来改变其值。例如: ```javascript const myEnum = { A: 1, B: 2 }; myEnum.A = 5; // 允许修改 ``` - `as const` 对象在运行时仍然是可修改的,但 TypeScript 在编译时会将其视为只读对象。这意味着开发者可以通过类型推断来确保数据不会被意外修改。 4. **类型推断**: - 使用 `as const` 时,TypeScript 会根据对象的结构进行严格的类型推断,生成一个包含所有属性类型的联合类型。例如: ```typescript const obj = { a: 1, b: "hello" } as const; // TypeScript 推断出:{ readonly a: number; readonly b: string } ``` - 枚举(enum)在 TypeScript 中可以通过 `type` 声明来定义,但其值仍然是动态的。 **总结**: - `as const` 对象主要用于确保数据在编译时被视为只读,并帮助开发者进行严格的类型推断。 - 枚举(enum)则更多地用于定义一组常量值,通常与状态或选项相关。两者在功能和使用场景上有所不同。
使用 `as const` 的声明对象通过常量断言实现枚举样式行为。例如,`const Color = { Red: 'RED', Blue: 'BLUE' } as const` 创建一个不可变的对象,TypeScript 可以推断出字面量类型。这种方法在 TypeScript 和 JavaScript 中都适用,支持树洗优化比枚举更好,并且避免了枚举转译时的一些边界情况。缺点是稍微复杂的类型提取:需要 `type Color = typeof Color[keyof typeof Color]` 来获取并集类型。许多团队现在倾向于使用 `as const` 对象,基于这些实用性原因。
-
**类型守卫是什么,为什么我需要生成它?** --- *(Note: The literal translation of "what" in this context is preserved as-is, but the phrasing was adjusted for natural flow in Chinese.)*
一个类型守卫是运行时将值的类型缩小的函数。对于枚举,类型守卫会检查字符串或数字是否真的是枚举成员,并告诉 TypeScript 的类型系统结果。例如,`function isColor(value: string): value is Color` 仅在 `value` 匹配枚举成员时返回 true。这在验证 API 响应、表单输入或任何外部数据时非常有用,因为你需要确认值是否属于你的枚举之前才能使用类型安全代码。
