什么是枚举类型,以及它的使用方法

答:

枚举是一个被命名的整型常数的集合,用于声明一组命名的常数。当一个变量有几种可能的取值时,可以将它定义为枚举类型。通俗来说,枚举就是一个对象的所有可能取值的集合。

枚举的形式与联合类型相似:

enum 枚举名 {
  标识符①[= 整型常数],
  标识符②[= 整型常数],
  ...
  标识符N[= 整型常数]
}

枚举类型可以分成:

数字枚举

当我们声明一个枚举类型时,即使没有给它们赋值,它们的值其实是默认的数字类型,而且默认从 0 开始依次累加:

enum Direction {
  Up,    // 值默认为 0
  Down,  // 值默认为 1
  Left,  // 值默认为 2
  Right  // 值默认为 3
}

如果我们将第一个值进行赋值,后面的值也会根据前一个值累加 1:

enum Direction {
  Up = 10,
  Down,  // 11
  Left,  // 12
  Right  // 13
}

字符串枚举

枚举类型的值也可以是字符串类型:

enum Direction {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right'
}
console.log(Direction['Right'], Direction.Up) // Right Up

如果设定了一个变量为字符串之后,后续的字段也需要赋值为字符串,否则报错:

enum Direction {
  Up = 'UP',
  Down,  // error TS1061: Enum member must have initializer
  Left,  // error TS1061: Enum member must have initializer
  Right  // error TS1061: Enum member must have initializer
}

异构枚举

将数字枚举和字符串枚举结合起来混合使用:

enum BooleanLikeHeterogeneousEnum {
  No = 0,
  Yes = 'YES'
}

通常情况下很少会使用异构枚举。

声明合并

多处定义的同名枚举会进行合并:

enum Direction {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right'
}

enum Direction {
  Center = 1
}

来源整理自:vue3js.cn 面试官系列