04-ts-枚舉

這是我參與更文挑戰的第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
}
複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息