5.4.1 数值型枚举

数值型枚举是最常用的枚举类型,是number类型的子类型,它由一组命名的数值常量构成。定义数值型枚举的方法如下所示:


01 enum Direction {
02     Up,
03     Down,
04     Left,
05     Right
06 }
07 
08 const direction: Direction = Direction.Up;

此例中,我们使用enum关键字定义了枚举类型Direction,它包含了四个枚举成员Up、Down、Left和Right。在使用枚举成员时,可以像访问对象属性一样访问枚举成员。

每个数值型枚举成员都表示一个具体的数字。如果在定义枚举时没有设置枚举成员的值,那么TypeScript将自动计算枚举成员的值。根据TypeScript语言的规则,第一个枚举成员的值为0,其后每个枚举成员的值等于前一个枚举成员的值加1。因此,Direction枚举中Up的值为0、Down的值为1,以此类推。示例如下:


01 enum Direction {
02     Up,      // 0
03     Down,    // 1
04     Left,    // 2
05     Right,   // 3
06 }

在定义数值型枚举时,可以为一个或多个枚举成员设置初始值。对于未指定初始值的枚举成员,其值为前一个枚举成员的值加1。在5.4.5节中将详细介绍枚举成员的计算规则。示例如下:


01 enum Direction {
02     Up = 1,    // 1
03     Down,      // 2
04     Left = 10, // 10
05     Right,     // 11
06 }

前文提到,数值型枚举是number类型的子类型,因此允许将数值型枚举类型赋值给number类型。例如,下例中常量direction为number类型,可以使用数值型枚举Direction来初始化direction常量。示例如下:


01 enum Direction {
02     Up,
03     Down,
04     Left,
05     Right
06 }
07 
08 const direction: number = Direction.Up;

需要注意的是,number类型也能够赋值给枚举类型,即使number类型的值不在枚举成员值的列表中也不会产生错误。示例如下:


01 enum Direction {
02     Up,
03     Down,
04     Left,
05     Right,
06 }
07 
08 const d1: Direction = 0;  // Direction.Up
09 const d2: Direction = 10; // 不会产生错误