TypeScript宗旨 我覺得Typescript的宗旨是 任何一個 TypeScript 程式,在手動刪去類型部分,將尾碼改成 .js 後,都應能夠正常運行。Typescript是javascript的超集,是編譯期行為,不引入額外開銷,不改變運行時行為,始終與 ESMAScript 語言標準一 ...
TypeScript宗旨
我覺得Typescript的宗旨是 任何一個 TypeScript 程式,在手動刪去類型部分,將尾碼改成 .js 後,都應能夠正常運行。Typescript是javascript的超集,是編譯期行為,不引入額外開銷,不改變運行時行為,始終與 ESMAScript 語言標準一致。
但是enum類型了引入了 JavaScript 沒有的數據結構(編譯成一個雙向 map),入侵了運行時,與 TypeScript 宗旨不符。用 字元串聯合類型('enum1' | 'enum2' | 'enum3')可以做到相同的事,且在調試時可讀性更好。
以下 代碼展示了enum違背了宗旨的證據:
Enum實現
// TypeScript enum Test { enum1 = 2, enum2, enum3 } const test:Test = Test.enum2; // 3 // 編譯為javscript var Test; (function (Test) { Test[Test["enum1"] = 2] = "enum1"; Test[Test["enum2"] = 3] = "enum2"; Test[Test["enum3"] = 4] = "enum3"; })(Test || (Test = {})); var test = Test.enum2; // 3
推薦聯合類型(string literal union)實現
// Typescript type Test = 'enum1' | 'enum2' | 'enum3'; const test: Test = 'enum2'; // 編譯為javscript,非常簡單 var test = 'enum2';