# 枚举类型

通过enum 关键字进行定义枚举类型。

常见的逻辑操作中,通过返回不同的状态值status (0, 1, 2, 3) 来判断处理不同的结果,这样时间长了就会忘记他们所代表的状态 如果通过创建枚举类型用枚举的值来代表不同的状态就可以一目了然了。

# 枚举的值

枚举的值默认为它的下标,下标从0开始,如果第一个给初始值,后面会依次递增。

enum Color {Red, Black, Blue}
let b: Color = Color.Black  // 定义b为Color枚举类型,值为Color.Black
console.log(b)  // 默认返回 枚举的下标值 1

enum Color1 {Red = 2, Green, Blue}
let c:Color1 = Color1.Green
console.log(c)  // 3

# 自定义枚举值

enum Color2 {
  Red = 2,
  Green = 4,
  Blue = 8
}
let d:Color2 = Color2.Green
console.log(d)  // 4

enum PayStatus {
  succuss = 1,
  error = 2,
  null = 3
}
let success: PayStatus = PayStatus.succuss
let fail: PayStatus = PayStatus.error
console.log(success, fail) // 1 2

# 字符串枚举值

枚举值可以定义为字符串类型,但是字符串后面的不会自动递增,所以包含字符串的枚举最好全部自定义

enum Color3 {
  Red = 'red',
  Green = 'green',
  Blue = 'blue'
}
let d:Color3 = Color3.Green
console.log(d)  // green

# 异构枚举

可以定义数字类型或者字符串类型,字符串类型后面的值必须自定义。

enum Color4 {
  Red = 1, 
  Green = 'green', 
  Blue = 'blue'
}

# 联合接口使用

enum Color {
  red = 1, 
  green = 2, 
  blue = 3
}
interface Book {
  color: Color.red
}

let book: Book = {
  color: Color.red
}
// 或者
let book: Book = {
  color: 1
}

# 反向映射

// 数字可以反向映射,字符串不可以
enum Color {
  red = 1, 
  green = 2, 
  blue = 3
}
let red:number = Color.red

let num = Color[red]

console.log(red) // 1
console.log(num) // red

# const枚举

枚举前可以加const定义,const枚举和正常枚举没使用上什么区别,区别就是编译后的js不同,不加const为一个对象,加了就直接把每个值编译为一个常量。

const enum Color {
  red = 1, 
  green = 2, 
  blue = 3
}