TS学习笔记6:枚举作为类型使用

1,863 阅读1分钟

点击此处访问本文所属专栏

枚举表示的是一个命名元素的集合,它能够使程序避免因硬编码的值而显杂乱且难以维护。满足特定条件后,枚举值和枚举成员也可以作为类型来使用。

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()
}
  1. 使用枚举成员作为类型使用

下面的例子中,用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{
    OffOn
}
interface Light {
    status: Status
}

现在通过接口Light实现的对象,其status值只能是Status.Off或Status.On。

const light: Light = {
    status: Status.On
}