Skip to content

枚举类型

在 TypeScript 中,枚举(Enumeration)类型用于定义一组命名的常量值。枚举类型允许我们为一组相关的值分配有意义的名称,以便更容易理解和使用这些值。

数字枚举

typescript
enum Color{
    red,
    green,
    blue
}
console.log(Color.red);   //0
console.log(Color.green); //1
console.log(Color.blue);  //2

//增长枚举
enum Color2{
    red=1,
    green,
    blue
}
console.log(Color2.red); //1
console.log(Color2.green); //2
console.log(Color2.blue); //3

字符串枚举

typescript
enum Color {
    red = 'red',
    green = 'green',
    blue = 'blue'
}

console.log(Color.red);   //red
console.log(Color.green); //green
console.log(Color.blue);  //blue

异构枚举

typescript
enum Color {
    yes = 1,
    no = 'no'
}

console.log(Color.yes); //1
console.log(Color.no);  //no

接口枚举

typescript
enum Color {
    yes = 1,
    no = 'no'
}

interface A{
    red:Color.yes
}

let obj:A={
    red:Color.yes
}

console.log(obj.red); //1

const枚举

typescript
// 定义为let或var是不可以的
const enum Types {
    success,
    fall
}

let code: number = 0
if (code === Types.success) {

}

编译后的js文件:

javascript
"use strict";
//此时Types直接为常量0
let code = 0;
if (code === 0 /* Types.success */) {
}

在enum前去掉const 编译后的js文件为:

javascript
"use strict";
// 定义为let或var是不可以的
var Types;
// 此时Types为一个对象
(function (Types) {
    Types[Types["success"] = 0] = "success";
    Types[Types["fall"] = 1] = "fall";
})(Types || (Types = {}));
let code = 0;
if (code === Types.success) {
}

反向映射

在js中其实是通过Types[Types["success"] = 0] = "success";这样赋值有两个阶段:

  1. Types["success"] = 0,枚举中,默认从0开始计数,所以将名为"success"的枚举常量的值设置为0,并将其存储在枚举类型Types中。
  2. Types[0]="success",将索引为0的元素值设置为"success"
typescript
enum Types {
    success,
}

let success: number = 0//Types.success=0

let key = Types[success]//Types[0]='success'

console.log(`value:${success}`, `key---${key}`)//value:0 key---success

Released under the MIT License.