2016-03-15 26 views
0

我在打字稿規定的下列枚舉:錯誤在JavaScript

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。

回答

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,你會像你描述得到錯誤。

+0

是的,這只是輸出文件的一小部分。猜猜看,上面的代碼行包含:'//#sourceMappingURL = somefilename.js.mapvar ColorType;',構建腳本將一對文件連接成一個輸出文件,'var ColorType'結束於註釋結尾之前的文件由於缺少回車。所以,容易解決,謝謝! –