TypeScript與JavaScript不同之處系列(六) ===>列舉
阿新 • • 發佈:2019-01-05
本系列目的: 列出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"