Skip to main content

枚举与常量枚举

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 对象的存在。