Typescript 枚举生成的 javascript 错误

Error in javascript generated by Typescript enum

我在 Typescript 中定义了以下枚举:

enum ColorType {
    None = 0,
    Default = 1,
    RGB = 2,
    ColorSet = 3,
    Custom = 4
}

这编译为以下 javascript:

(function (ColorType) {
    ColorType[ColorType["None"] = 0] = "None";
    ColorType[ColorType["Default"] = 1] = "Default";
    ColorType[ColorType["RGB"] = 2] = "RGB";
    ColorType[ColorType["ColorSet"] = 3] = "ColorSet";
    ColorType[ColorType["Custom"] = 4] = "Custom";
})(ColorType || (ColorType = {}));

这看起来是正确的并且与 Tristate enum in the documentation 相似。然而,当我 运行 浏览器中的代码时,Firefox 和 Chrome 都抱怨 ColorType 没有在枚举定义的最后一行定义(即 (ColorType || (ColorType = {})))。我认为这是第一个。当我手动编辑代码为:

(function (ColorType) {
    ColorType[ColorType["None"] = 0] = "None";
    ColorType[ColorType["Default"] = 1] = "Default";
    ColorType[ColorType["RGB"] = 2] = "RGB";
    ColorType[ColorType["ColorSet"] = 3] = "ColorSet";
    ColorType[ColorType["Custom"] = 4] = "Custom";
})(ColorType = {});

它在 Firefox 和 Chrome 中都工作正常。

我不明白为什么 Typescript 生成的代码会产生错误,看起来他们试图传入一个已经存在的 ColorType 变量,或者如果它不存在则创建一个空对象.但如果错了,这是Typescript编译器的错误吗?我正在使用 TSC 1.7.40.24720。

听起来您只是在剪切和粘贴输出的 部分

编译器为枚举生成此代码:

var ColorType; // <---- this is the line you're missing
(function (ColorType) {
    ColorType[ColorType["None"] = 0] = "None";
    ColorType[ColorType["Default"] = 1] = "Default";
    ColorType[ColorType["RGB"] = 2] = "RGB";
    ColorType[ColorType["ColorSet"] = 3] = "ColorSet";
    ColorType[ColorType["Custom"] = 4] = "Custom";
})(ColorType || (ColorType = {}));

如果您跳过 var,您将遇到您所描述的错误。