- 介绍
- TypeScript 简介
- TypeScript 入门
- 探索类型系统
- 原始类型
- 类型注释
- 可选属性
- 只读属性
- 索引签名
- 扩展类型
- 字面量类型
- 字面量推断
- 严格空检查
- 枚举
- 缩小范围
- 赋值
- 控制流分析
- 类型谓词
- 可区分联合
- never 类型
- 详尽性检查
- 对象类型
- 元组类型(匿名)
- 命名元组类型(已标记)
- 固定长度元组
- 联合类型
- 交集类型
- 类型索引
- 值的类型
- Func 返回值的类型
- 模块的类型
- 映射类型
- 映射类型修饰符
- 条件类型
- 分配条件类型
- infer 条件类型中的类型推断
- 预定义条件类型
- 模板联合类型
- 任意类型
- 未知类型
- 空类型
- Never 类型
- 接口及类型
- 内置原始数据类型
- 常见的内置 JS 对象
- 重载
- 合并与扩展
- 类型和接口之间的差异
- Class
- 泛型
- 擦除的结构类型
- 命名空间
- Symbols
- 三斜杠指令
- 类型操作
- 其他
枚举
在 TypeScript 中,枚举是一组命名常量值。
enum Color { Red = '#ff0000', Green = '#00ff00', Blue = '#0000ff', }
枚举可以用不同的方式定义:
数字枚举
在 TypeScript 中,数字枚举是一个枚举,其中每个常量都分配有一个数值,默认从 0 开始。
enum Size { Small, // 值从 0 开始 Medium, Large, }
可以通过显式分配来指定自定义值:
enum Size { Small = 10, Medium, Large, } console.log(Size.Medium); // 11
字符串枚举
在 TypeScript 中,字符串枚举是每个常量都分配有一个字符串值的枚举。
enum Language { English = 'EN', Spanish = 'ES', }
注意:TypeScript 允许使用异构枚举,其中字符串和数字成员可以共存。
常量枚举
TypeScript 中的常量枚举是一种特殊类型的枚举,其中所有值在编译时都是已知的,并且在使用枚举的任何地方都会内联,从而产生更高效的代码。
const enum Language { English = 'EN', Spanish = 'ES', } console.log(Language.English);
将被编译成:
console.log('EN' /* Language.English */);
注意:常量枚举具有硬编码值,擦除枚举,这在独立库中可能更有效,但通常是不可取的。此外,常量枚举不能有计算成员。
反向映射
在 TypeScript 中,枚举中的反向映射是指从值中检索枚举成员名称的能力。默认情况下,枚举成员具有从名称到值的正向映射,但可以通过为每个成员显式设置值来创建反向映射。当您需要按枚举成员的值查找枚举成员,或者需要迭代所有枚举成员时,反向映射非常有用。需要注意的是,只有数字类型的枚举成员会生成反向映射,字符串类型的枚举成员则不会。
以下枚举:
enum Grade { A = 90, B = 80, C = 70, F = 'fail', }
编译为:
'use strict'; var Grade; (function (Grade) { Grade[(Grade['A'] = 90)] = 'A'; Grade[(Grade['B'] = 80)] = 'B'; Grade[(Grade['C'] = 70)] = 'C'; Grade['F'] = 'fail'; })(Grade || (Grade = {}));
由此可见,对数字类型的枚举成员,可以从枚举值映射回枚举名称,但对字符串类型的枚举成员无法这样做。
enum Grade { A = 90, B = 80, C = 70, F = 'fail', } const myGrade = Grade.A; console.log(Grade[myGrade]); // A console.log(Grade[90]); // A const failGrade = Grade.F; console.log(failGrade); // fail console.log(Grade[failGrade]); // 因为索引表达式的类型不是 'number',所以元素是隐式的 'any' 类型。
环境枚举
TypeScript 中的环境枚举是一种在声明文件 (*.d.ts) 中定义的枚举类型,没有关联的实现。它允许您定义一组命名常量,这些常量可以在不同文件中以类型安全的方式使用,而无需在每个文件中导入实现细节。
计算成员和常量成员
在 TypeScript 中,计算成员是枚举的成员,其值在运行时计算,而常量成员是其值在编译时设置且在运行时无法更改的成员。常规枚举中允许使用计算成员,而常规枚举和常量枚举中都允许使用常量成员。
// 常量成员 enum Color { Red = 1, Green = 5, Blue = Red + Green, } console.log(Color.Blue); // 6 编译时生成
// 计算成员 enum Color { Red = 1, Green = Math.pow(2, 2), Blue = Math.floor(Math.random() * 3) + 1, } console.log(Color.Blue); // 运行时生成的随机数
枚举由包含其成员类型的联合表示。每个成员的值可以通过常量或非常量表达式确定,拥有常量值的成员被分配字面量类型。为了说明这一点,请考虑类型 E 及其子类型 E.A、E.B 和 E.C 的声明。在本例中,E 表示联合 E.A | E.B | E.C 。
const identity = (value: number) => value; enum E { A = 2 * 5, // 数字字面量 B = 'bar', // 字符串字面量 C = identity(42), // 不透明计算 } console.log(E.C); //42
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论