枚举和常量枚举的区别

枚举和常量枚举(const枚举):使用枚举可以清晰地表达意图或创建一组有区别的用例

// 枚举
enum Color { Red, Green, Blue }

// 常量枚举
const enum Color { Red, Green, Blue }

区别:

  1. 枚举会被编译时会编译成一个对象,可以被当作对象使用
// 枚举
enum Color {
  Red,
  Green,
  Blue
}

var sisterAn = Color.Red
// 会被编译成 JavaScript 中的 var sisterAn = Color.Red
// 即在运行执行时,它将会查找变量 Color 和 Color.Red
  1. const 枚举会在 typescript 编译期间被删除,const 枚举成员在使用的地方会被内联进来,避免额外的性能开销
// 常量枚举
const enum Color {
  Red,
  Green,
  Blue
}

var sisterAn = Color.Red
// 会被编译成 JavaScript 中的 var sisterAn = 0
// 在运行时已经没有 Color 变量

由此可见,使用 常量枚举 会有更好的性能。

定义的枚举,在经过编译器编译后是一个对象,这个对象我们可以在程序运行时使用,前面有说到。但有时定义枚举可能只是为了让程序可读性更好,而不需要编译后的代码,即不需要编译成对象。typescript中考虑到这种情况,所以加入了 const enum (完全嵌入的枚举)。