枚举类型
在 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";这样赋值有两个阶段:
- Types["success"] = 0,枚举中,默认从0开始计数,所以将名为"success"的枚举常量的值设置为0,并将其存储在枚举类型Types中。
- 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