【TypeScript】初步瞭解列舉
阿新 • • 發佈:2021-01-06
TypeScript 初步瞭解列舉
理解:列舉是列舉固定幾個值,直接定義變數的話的話可以隨意定義,列舉只能使用你定義好的幾個值。使用列舉我們可以定義一些帶名字的常量,TypeScript支援數字的和基於字串的列舉
使用了列舉,別人只能傳你列舉類裡定義好的幾個型別,傳其它的就會在編譯時期報錯
數字列舉
我們定義了一個數字列舉, Up使用初始化為 1。 其餘的成員會從 1開始自動增長(自增長1)
。 換句話說,Direction.Up的值為 1, Down為 2, Left為 3, Right為 4
enum Direction { Up = 1, Down, Left, Right }
不使用初始化器,則 Up的值為 0, Down的值為 1…自增長的行為是很有用處的,但是要注意每個列舉成員的值都是不同的
enum Direction { Up, Down, Left, Right }
通過列舉的屬性來訪問列舉成員,和列舉的名字來訪問列舉型別:
enum response {
No = 0,
Yes = 1
}
function a(b: string, message: response): void {
// ...
}
a("test", response.Yes)
下面的情況不被允許的:
enum E {
A = getSomeValue(),
B // error! 'A' is not constant-initialized, so 'B' needs an initializer
}
原因: 由於getSomeValue()不是一個初始常量(到執行時才能確定的值就不是constant值了),所以此時需要給B初始值
字串列舉:
在一個字串列舉裡,每個成員都必須
用字串字面量,或另外一個字串列舉成員進行初始化
enum a {
Up = "Up",
Down = "DOWN",
Left = "LEFT" ,
Right = "RIGHT"
}
計算的和常量成員
// 以下所有列舉成員都是常量
enum E { X }
enum E1 { X, Y, Z }
enum E2 {
A = 1, B, C
}
enum FileAccess {
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// computed member
G = "123".length
}
聯合列舉與列舉成員的型別
當列舉成員成為了型別
enum ShapeKind {
Circle,
Square,
}
interface Circle {
kind: ShapeKind.Circle;
radius: number;
}
interface Square {
kind: ShapeKind.Square;
sideLength: number;
}
let c: Circle = {
kind: ShapeKind.Square,
// ~~~~~~~~~~~~~~~~ Error!
radius: 100
}
當列舉型別本身變成了每個列舉成員的 聯合