Enums
使得我們能夠定義有名字的數(shù)字常量集
enum Direction {
Up = 1,
Down, // 2
Left, // 3 以此類推
Right
}
枚舉體包含0個(gè)或多個(gè)枚舉成員流椒。枚舉成員都對應(yīng)一個(gè)數(shù)字值叁扫,這個(gè)數(shù)字值可以是constant
或者computed
一個(gè)枚舉值是constant
,滿足一下條件
- 它沒有進(jìn)行初始化供鸠,而且它的前一個(gè)枚舉值是常量,那么它對應(yīng)的數(shù)字常量值為前一個(gè)枚舉值對應(yīng)的數(shù)字常量值
+1
- 被一個(gè)常量枚舉表達(dá)式初始化-是TypeScript表達(dá)式的子集,在編譯時(shí)計(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)編譯時(shí)錯(cuò)誤。
其他情況下的枚舉成員都認(rèn)為是被計(jì)算的
enum FileAccess {
// constant members
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// computed member
G = "123".length
}
一個(gè)枚舉在運(yùn)行時(shí)實(shí)際上是一個(gè)對象逾条。
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