TS学习笔记(六):枚举

枚举是组织收集有关联变量的一种方式,使用枚举我们可以定义一些带名字的常量,像 C# 和 Java 都有枚举数据类型,TypeScript 将枚举类型引进到了 JavaScript 中。

数字枚举

枚举类型的值是数字类型,因此它们被称为数字类型枚举,成员的值可以不用初始化,因为具有自增行为。

// 默认自增
enum Person {
  name,
  age,
  love,
  hobby
}
console.log(Person.name); // 0
console.log(Person.hobby); // 3

// 可人为自行修改
enum Person {
  name = 4,
  age = 3,
  love = 2,
  hobby = 1
}
console.log(Person.name); // 4
console.log(Person.hobby); // 1

数字枚举的反向映射

数字枚举成员还具有 反向映射 的特性,从枚举值到枚举名字,要注意的是 不会为字符串枚举成员生成反向映射。

enum Person {
  name,
  age,
  love,
  hobby
}
console.log(Person[Person.love]); // love

字符串枚举

在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。

enum Person {
  name = 'NAME',
  age = 'AGE',
  love = 'LOVE',
  hobby = 'HOBBY'
}
console.log(Person.name); // NAME
console.log(Person.hobby); // HOBBY

异构枚举

枚举可以混合字符串和数字成员,但一般没必要这么做。

enum Person {
  name = 1,
  age = 2,
  love = 'LOVE',
  hobby = 'HOBBY'
}
console.log(Person.name); // 1
console.log(Person.hobby); // HOBBY

常量枚举

常量枚举通过在枚举上使用 const 修饰符来定义,常量枚举不同于常规的枚举,他们会在编译阶段被删除。

const enum Size {
  WIDTH = 10,
  HEIGHT = 20
}
const area = Size.WIDTH * Size.HEIGHT; // 200

常量枚举成员在使用的地方会被内联进来,之所以可以这么做是因为,常量枚举不允许包含计算成员;如上例所示,在运行时是没有 Size 变量的,因此常量枚举会带来一个对性能的提升。

other

  • 理解外部枚举

你可能感兴趣的:(TS学习笔记(六):枚举)