使用枚举我们可以定义一些带名字的常量。使用枚举可以清晰地表达意图或创建一组有区别的用例。TypeScript支持数字和基于字符的枚举。
(1)数字枚举
enum Direction {Up,Right,Down,Left
}
以上就是一个基本的数字枚举,Up的初始值为0,后一位的枚举值在前一位的基础上+1。也可以指定初始值。
enum Direction {Up = 1,Right,Down,Left
}
像这样,Up,Right,Down,Left的值依次是1,2,3,4。
(2)字符串枚举
使用字符串作为枚举值时,必须为每一个枚举成员设置枚举值。因为字符串枚举没有自增长的能力,同时字符串枚举可以很好的序列化。
enum Direction {Up = "Up",Right = "Right",Down = "Down",Left = "Left"
}
(3)异构枚举
从技术的角度上,数字和字符串枚举值可以混用,但通常不这么做。
enum State {No = 0,Yes = true
}
当满足以下条件时,成员被当做是常量:
+, -, ~其中之一应用在了常量枚举表达式+, -, *, /, %, <<, >>, >>>, &, |, ^的操作对象。 若常数枚举表达式求值后为 NaN或 Infinity,则会在编译阶段报错。ps.其他情况均为需要计算得到的值
存在一种特殊的非计算的常量枚举成员的子集:字面量枚举成员。 字面量枚举成员是指不带有初始值的常量枚举成员,或者是值被初始化为
"foo", "bar", "baz")1, 100)-符号的数字字面量(例如: -1, -100)当所有枚举成员都拥有字面量枚举值时,它就带有了一些特殊的语义。
首先,枚举成员可以被当做类型。
enum ShapeKind {Circle,Square,
}interface Circle {kind: ShapeKind.Circle;radius: number;
}
其次,枚举类型本身变成了整个枚举类型成员的联合。
可以通过属性名获取枚举值,同时也可以通过枚举值获取到枚举成员的名字。
const Direction {Up,Right,Down,Left
}const up = Direction.Up;
console.log(Direction[up]); // Up
可以使用const关键字定义常量枚举,常量枚举的好处是,不能包含计算成员。
const Direction {Up,Right,Down,Left
}
外部枚举用来描述已经存在的枚举类型的形状。
declare enum Enum {A = 1,B,C = 2
}