枚举
可以定义一些带名字的常量,使用枚举可以清除地表达意图或创建一组有区别的用例。TypeScript支持数字的基于字符串的枚举。
数字枚举
enum Direction {
up = 1,
down,
left,
right
}
如上定义了up使用初始化为0,其余的会从1开始自动增长。
可以不用初始化器
enum Direction {
up,
down,
left,
right
}
现在up值为0,down的值为1等等。当我们不在乎成员的值的时候,这种自增长的行为是很有用处的,但是要注意每个枚举成员的值都是不同的。
通过枚举的属性来访问枚举成员,和枚举的名字来访问枚举类型:
enum Response {
No = 0 ,
Yes = 1 ,
}
function responed(recipient: string, message: Response) : void {
// .......
}
respond('Princess' , Response.Yes)
错误写法:
enum res {
A = getSomeValue(),
B , // error 会报错
}
字符串枚举
字符串枚举的概念很简单,但是有细微的运行时的差别。在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化。换句话说。如果你正在调试并且必须要读一个数字枚举的运行时的值,这个值通常很难读的-它并不能表达有用的信息(尽管反向映射会有所帮助),字符串枚举允许你提供一个运行时有意义的并且可读的值,独立于枚举成员的名字。
异构枚举
可以混合数字枚举和字符串枚举(一般不会这么用的)
enum Direction {
No = 0 ,
Yes = 'Yes'
}