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