本系列目的: 列出TypeScript與JavaScript的不同點, 縮小文件內容, 提高學習速度. 原文件地址: https://www.tslang.cn/index.html

列舉

簡單使用

enum Direction { a = 3, b, c, d} // 手動賦值,  b c d的值分別為4, 5, 6
enum Direction { a, b, c, d} // 預設賦值, a b c d的值分別為1, 2, 3, 4

// 使用列舉
enum Response {
    No = 0,
    Yes = 1,
}

function respond(recipient: string, message: Response): void {
    // ...
}

respond("Princess Caroline", Response.Yes)

字串列舉

每個成員都必須用字串字面量,或另外一個字串列舉成員進行初始化。

enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}

常量列舉

常量列舉只能使用常量列舉表示式,並且不同於常規的列舉,它們在編譯階段會被刪除。 常量列舉成員在使用的地方會被內聯進來。 之所以可以這麼做是因為,常量列舉不允許包含計算成員。

const enum Directions {
    Up,
    Down,
    Left,
    Right
}

let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]


// 編譯後的的程式碼為: 可以看到enum沒有了

var directions = [0 /* Up */, 1 /* Down */, 2 /* Left */, 3 /* Right */];

異構列舉

就是字串和數字的混合, 官方不建議這麼使用

enum BooleanLikeHeterogeneousEnum {
    No = 0,
    Yes = "YES",
}

反向對映

enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"