◆

TypeScript 枚举 enum 详解

2023-02-02 01:370

什么是枚举

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript 支持数字的和基于字符串的枚举。

示例

如下枚举,生成的值 A=0,B=1,C=100,D=101,可以看出数字枚举是自增长的。

export enum NumEnum {
  A,
  B,
  C = 100,
  D,
}

字符串枚举

export enum StringEnum {
  A = 'testa',
  B = '66',
  C = 101,
}

枚举编译后的样子

上述的枚举示例编译后的代码如下,可以看出枚举是一个变量,初始值是一个空对象,然后在立即执行表达式中,将枚举的值赋予了。

export var NumEnum;
(function (NumEnum) {
  NumEnum[(NumEnum['A'] = 0)] = 'A';
  NumEnum[(NumEnum['B'] = 1)] = 'B';
  NumEnum[(NumEnum['C'] = 100)] = 'C';
  NumEnum[(NumEnum['D'] = 101)] = 'D';
})(NumEnum || (NumEnum = {}));

export var StringEnum;
(function (StringEnum) {
  StringEnum['A'] = 'testa';
  StringEnum['B'] = '66';
  StringEnum[(StringEnum['C'] = 101)] = 'C';
})(StringEnum || (StringEnum = {}));

如何理解 NumEnum[NumEnum["A"] = 0] = "A" 这个赋值语句

  • 首先 NumEnum["A"] = 0 就是相当于 NumEnum 对象的 A 属性的值为 0
  • 然后赋值语句就变成了 NumEnum[0] = "A"
  • 这样就能看出枚举中定义一个变量,就相当于在对象中增加了两个值,如上述代码就是 {A: 0, 0: 'A'}

打印一下 NumEnum,如图所示

枚举enum详解

可以看出每定义一个属性,其对应的属性值都有映射。但是从 StringEnum 可以看出,反向映射只有数值性枚举具有,而字符串枚举是没有的

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVETypeScript 枚举 enum 详解加载中