Typescript使用字符串聯合類型代替枚舉類型


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';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM