个人TypeScript学习11--关于枚举

1.数字类型枚举

enum Color {
  Red,
  Green,
  Blue
}
let col = Color.Red;
col = 0; // 有效的,这也是 Color.Red

在被编译成js后

var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));

js将Color[“Red”]赋值为0,再将Color[Color[“Red”] = 0],即 Color[0] = “Red”;
所以下面的代码也是可行的

console.log(Color[0]);   // 输出‘Red’
console.log(Color['Red']) //输出 0

默认情况下,第一个枚举为0,也可以定义第一个枚举的值

enum Color {
  DarkRed = 3, // 3
  DarkGreen, // 4
  DarkBlue // 5
}

字符串类型枚举

export enum EvidenceTypeEnum {
  UNKNOWN = '',
  PASSPORT_VISA = 'passport_visa',
  PASSPORT = 'passport',
  SIGHTED_STUDENT_CARD = 'sighted_tertiary_edu_id',
  SIGHTED_KEYPASS_CARD = 'sighted_keypass_card',
  SIGHTED_PROOF_OF_AGE_CARD = 'sighted_proof_of_age_card'
}

常量枚举

const enum Tristate {
  False,
  True,
  Unknown
}

看似没有变化,增加了const 关键字,但如果这里设置一个值

const lie = Tristate.False;

不加const的定义方式下,编译成js为

let lie = Tristate.False

使用常量枚举下会编译成

let lie = 0;

编译器将会:

内联枚举的任何用法(0 而不是 Tristate.False);
不会为枚举类型编译成任何 JavaScript(在这个例子中,运行时没有 Tristate 变量),因为它使用内联语法。

常量枚举 preserveConstEnums 选项

使用内联语法对性能有明显的提升作用。运行时没有 Tristate 变量的事实,是因为编译器帮助你把一些在运行时没有用到的不编译成 JavaScript。然而,你可能想让编译器仍然把枚举类型编译成 JavaScript,用于如上例子中从字符串到数字,或者是从数字到字符串的查找。在这种情景下,你可以使用编译选项 --preserveConstEnums,它会编译出 var Tristate 的定义,因此你在运行时,手动使用 Tristate[‘False’] 和 Tristate[0]。并且这不会以任何方式影响内联。

参考资料:深入理解TypeScript

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值