Ошибка в javascript, созданной перечислением Typescript

Я определил следующее перечисление в 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 = {}));

Это выглядит правильно и похоже на трехстороннее перечисление в документация. Однако, когда я запускаю код в браузере, и 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.


person Marco Miltenburg    schedule 15.03.2016    source источник


Ответы (1)


Похоже, вы просто вырезаете и вставляете часть вывода?

Компилятор генерирует этот код для перечисления:

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, вы получите такие же ошибки, как вы описали.

person Ryan Cavanaugh    schedule 15.03.2016
comment
Да, это лишь небольшая часть полученного файла. Угадайте, что строка выше содержит: //# sourceMappingURL=somefilename.js.mapvar ColorType;, Сценарий сборки объединяет пару файлов в один выходной файл, и var ColorType заканчивается в конце комментария предыдущего файла из-за отсутствия возврата каретки. Итак, простое исправление, спасибо! - person Marco Miltenburg; 15.03.2016