11.TS枚举类型

92 阅读2分钟

在javaScript中是没有枚举的概念的TS帮我们定义了枚举这个类型

使用枚举 通过enum关键字定义我们的枚举
1.数字枚举
enum Persons {
  'LY',
  'DHN',
  'WS',
}
​
console.log(Persons.LY) // 0
console.log(Persons.DHN) // 1
console.log(Persons.WS) // 2

这样写相当于

enum Persons {
  'LY' = 0,
  'DHN' = 1,
  'WS' = 2,
}
​
console.log(Persons.LY) // 0
console.log(Persons.DHN) // 1
console.log(Persons.WS) // 2

自增长枚举

enum Persons {
  'LY' = 1,
  'DHN',
  'WS',
}
​
console.log(Persons.LY) // 1
console.log(Persons.DHN) // 2
console.log(Persons.WS) // 3
2.字符串枚举

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

enum Types{
   'LY' = '1',
   'DHN' = '2',
   'WS' = '3'
}

由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化。 换句话说,如果你正在调试并且必须要读一个数字枚举的运行时的值,这个值通常是很难读的 - 它并不能表达有用的信息,字符串枚举允许你提供一个运行时有意义的并且可读的值,独立于枚举成员的名字。

3.异构枚举

枚举可以混合字符串和数字成员

enum Types{
   No = "No",
   Yes = 1,
}
4.接口枚举

定义一个枚举Types 定义一个接口A 他有一个属性为aaa值为Types.yyds

声明对象的时候要遵循这个规则

enum Persons {
  LY = 1,
  KK = 'no',
}
​
interface A {
  red: Persons.LY
}
​
const obj: A = {
  red: 1,
}
​
console.log(obj.red)
​
5.const枚举

let 和 var 都是不允许的声明只能使用const

大多数情况下,枚举是十分有效的方案。 然而在某些情况下需求很严格。 为了避免在额外生成的代码上的开销和额外的非直接的对枚举成员的访问,我们可以使用 const枚举。 常量枚举通过在枚举上使用 const修饰符来定义

const 声明的枚举会被编译成常量

普通声明的枚举编译完后是个对象

const enum Types{
   No = "No",
   Yes = 1,
}
6.反向映射

它包含了正向映射( key -> value)和反向映射( value -> key

要注意的是 不会为字符串枚举成员生成反向映射。

enum Enum {
   fall
}
let a = Enum.fall;
console.log(a); //0
let nameOfA = Enum[a]; 
console.log(nameOfA); //fall