Enums
使得我們能夠定義有名字的數字常量集
enum Direction {
Up = 1,
Down, // 2
Left, // 3 以此類推
Right
}
枚舉體包含0個或多個枚舉成員。枚舉成員都對應一個數字值,這個數字值可以是constant
或者computed
一個枚舉值是constant
,滿足一下條件
- 它沒有進行初始化,而且它的前一個枚舉值是常量,那么它對應的數字常量值為前一個枚舉值對應的數字常量值
+1
- 被一個常量枚舉表達式初始化-是TypeScript表達式的子集,在編譯時計算。滿足以下條件就為
constant enum expression
- 數字字面量
- 引用此枚舉體或者其他枚舉體里面的
constant enum member
- 帶括號的
constant enum member
- 使用了
+
、-
、~
的constant enum member
- 使用了
+, -, *, /, %, <<, >>, >>>, &, |, ^
等二元操作符,并使用constant enum member
作操作數
如果constant enum member
計算為NaN
或者Infinity
則報編譯時錯誤。
其他情況下的枚舉成員都認為是被計算的
enum FileAccess {
// constant members
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// computed member
G = "123".length
}
一個枚舉在運行時實際上是一個對象。
const enum
大多數情況上使用regular enum
,但是如果對于性能有要求,則選擇const enum
,const enum
都是內聯的成員。
const enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]
Ambient enums
用于描述已經存在的enum types
的形狀
declare enum Enum {
A = 1,
B,
C = 2
}
最重要的不同就是,在non-ambient
,中,regular enum
中沒有初始化的成員為constant member
,而在non-const ambient
沒有初始化的成員為computed member