這是我參與更文挑戰的第5天,活動詳情查看: 更文挑戰web
使用枚舉咱們能夠定義一些帶名字的常量。 使用枚舉能夠清晰地表達意圖或建立一組有區別的用例。 TypeScript支持數字的和基於字符串的枚舉。編程
首先咱們看看數字枚舉,若是你使用過其它編程語言應該會很熟悉。markdown
enum Direction {
Up = 1,
Down,
Left,
Right
}
複製代碼
如上,咱們定義了一個數字枚舉, Up使用初始化爲 1。 其他的成員會從 1開始自動增加。 換句話說, Direction.Up的值爲 1, Down爲 2, Left爲 3, Right爲 4。編程語言
咱們還能夠徹底不使用初始化器:post
enum Direction {
Up,
Down,
Left,
Right,
}
複製代碼
如今, Up的值爲 0, Down的值爲 1等等。 當咱們不在意成員的值的時候,這種自增加的行爲是頗有用處的,可是要注意每一個枚舉成員的值都是不一樣的。ui
使用枚舉很簡單:經過枚舉的屬性來訪問枚舉成員,和枚舉的名字來訪問枚舉類型:url
enum Response {
No = 0,
Yes = 1,
}
function respond(recipient: string, message: Response): void {
// ...
}
respond("Princess Caroline", Response.Yes)
複製代碼
第一個位置的枚舉值不是常量, 後面位置的值就須要指定spa
enum E {
A = getSomeValue(),
B, // error! 'A' is not constant-initialized, so 'B' needs an initializer
}
複製代碼
字符串枚舉的概念很簡單,可是有細微的 運行時的差異。 在一個字符串枚舉裏,每一個成員都必須用字符串字面量,或另一個字符串枚舉成員進行初始化。3d
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
複製代碼
因爲字符串枚舉沒有自增加的行爲,字符串枚舉能夠很好的序列化。 字符串枚舉容許你提供一個運行時有意義的而且可讀的值,獨立於枚舉成員的名字。code
從技術的角度來講,枚舉能夠混合字符串和數字成員,可是通常咱們並不會這麼作:
enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES",
}
複製代碼
每一個枚舉成員都帶有一個值,它能夠是 常量或 計算出來的。 當知足以下條件時,枚舉成員被看成是常量:
它是枚舉的第一個成員且沒有初始化器,這種狀況下它被賦予值 0:
// E.X is constant:
enum E { X }
複製代碼
它不帶有初始化器且它以前的枚舉成員是一個 數字常量。 這種狀況下,當前枚舉成員的值爲它上一個枚舉成員的值加1。
// All enum members in 'E1' and 'E2' are constant.
enum E1 { X, Y, Z }
enum E2 {
A = 1, B, C
}
複製代碼