枚举类型 - TypeScript 标注类型
枚举类型
使用枚举我们可以定义一些带名字的常量。使用枚举可以清晰地表达意图或创建一组有区别的用例。TypeScript 支持数字的和基于字符串的枚举。
数字枚举
首先我们看看数字枚举,如果你使用过其它编程语言应该会很熟悉。使用enum
关键字定义枚举。
enum Direction { Up = 1, Down, Left, Right, }
如上,我们定义了一个数字枚举,Up
使用初始化为1
。其余的成员会从1
开始自动增长。
Direction.Up
的值为1
Down
为2
Left
为3
Right
为4
。
我们还可以完全不使用初始化器:
enum Direction { Up, Down, Left, Right, }
现在,Up
的值为0
。其余的成员会从0
开始自动增长。
Direction.Up
的值为0
Down
为1
Left
为2
Right
为3
。
当我们不在乎成员的值的时候,这种自增长的行为是很有用处的,但是要注意每个枚举成员的值都是不同的。
使用枚举很简单:通过枚举的属性来访问枚举成员,和枚举的名字来访问枚举类型:
enum UserResponse { No = 0, Yes = 1, } function respond(recipient: string, message: UserResponse): void { // ... } respond("Princess Caroline", UserResponse.Yes);
数值枚举可以混入计算成员和常量成员中。简短地说,没有初始化器的成员要么在首位,要么必须在用数值常量或其他常量枚举成员初始化的数值枚举之后。换句话说,下面的情况是不被允许的:
enum E { A = getSomeValue(), B, // Error! Enum member must have initializer.}
计算的和常量成员
每个枚举成员都带有一个值,它可以是常量或计算出来的。
当满足如下条件时,枚举成员被当作是常量:
第一:它是枚举的第一个成员且没有初始化器,这种情况下它被赋予值0
:
// E.X is constant:
enum E { X,
}
第二:它没有设置初始值,而它前面的枚举成员是一个数值常量。这种情况下,当前枚举成员的值为它上一个枚举成员的值加 1。
// All enum members in 'E1' and 'E2' are constant. enum E1 { X, // E.X=0 Y, // E.Y=1 Z, // E.Z=2 } enum E2 { A = 1, // E.A=1 B, // E.B=2 C, // E.C=3 }
第三:枚举成员使用常量枚举表达式初始化。常量枚举表达式是 TypeScript 表达式的子集,它可以在编译阶段求值。
当一个表达式满足下面条件之一时,它就是一个常量枚举表达式:
- 一个枚举表达式字面量(主要是字符串字面量或数字字面量)
- 一个对之前定义的常量枚举成员的引用(可以是在不同的枚举类型中定义的)
- 带括号的常量枚举表达式
- 一元运算符
+
,-
,~
其中之一应用在了常量枚举表达式 - 常量枚举表达式做为二元运算符
+
,-
,*
,/
,%
,,
>>>
,&
,|
,^
的操作对象。
若常量枚举表达式求值后为NaN
或Infinity
,则会在编译阶段报错。
所有其它情况的枚举成员被当作是需要计算得出的值。
enum FileAccess { // constant members None, Read = 1
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!