枚举与常量枚举
TypeScript 中有枚举和常量枚举,区别在于常量枚举是用 const 来声明的。 他们的区别是常量枚举会在编译阶段直接应用枚举值,而非常量枚举则会在编译阶段被编译成一个对象。
比如非常量枚举:
enum Color {
RED = '#FF0000',
BLUE = '#0000FF',
}
console.log(Color.BLUE, Color['BLUE']);
会被编译成:
var Color;
(function (Color) {
Color['RED'] = '#FF0000';
Color['BLUE'] = '#0000FF';
})(Color || (Color = {}));
console.log(Color.BLUE, Color['BLUE']);
但是常量枚举则会在编译阶段将值全部替换掉:
const enum ColorConst {
RED = '#FF0000',
BLUE = '#0000FF',
}
console.log(ColorConst.BLUE, ColorConst['BLUE']);
会被编译成:
console.log('#0000FF' /* BLUE */, '#0000FF' /* 'BLUE' */);
没有 ColorConst 对象的存在。