枚举表示的是一个命名元素的集合,它能够使程序避免因硬编码的值而显杂乱且难以维护。满足特定条件后,枚举值和枚举成员也可以作为类型来使用。
1.枚举作为类型使用的条件
当枚举成员的值都符合以下三个条件之一时,枚举值或成员可以作为类型来使用:
- 不带初始值的枚举值
enum E {A}
- 值为字面量
enum E {A = 'a'}
- 值为数字
enum E {A = -1}
数字枚举在定义值时可以使用常量或表达式,此时其后面的字段的默认递增值会失效,必须手动设置初始值
const rank: number = 3
const getNum = ():number => {
return 2
}
enum Status {
Uploading = 1,
Success = rank,
Failed = getNum()
}
- 使用枚举成员作为类型使用
下面的例子中,用Dog接口实现的实例dog,其type属性的值为Animals.Cat,与接口定义的Animals.Dog不符,因此编译不通过。
enum Animals {
Dog = 1,
Cat = 2
}
interface Dog {
type: Animals.Dog
}
const dog: Dog = {
type: Animals.Cat //error
}
3.枚举值本身作为联合类型使用
枚举值可以看做一个包含所有成员的联合类型:
enum Status{
Off,
On
}
interface Light {
status: Status
}
现在通过接口Light实现的对象,其status值只能是Status.Off或Status.On。
const light: Light = {
status: Status.On
}