数字枚举、字符串枚举、异构枚举
常量枚举:不转译枚举,代码较少
每个枚举属性都是只读的,不能赋值
表驱动
表驱动
// 枚举 enum OrderStatus1{ Pending, Shipped, Completed, Cancelled, Unknown } //-------0 1 2 3 4 // 数字枚举 enum OrderStatus2{ Pending=3, Shipped, Completed=8, Cancelled, Unknown } //---------3 4 8 9 10 // 字符串枚举 enum OrderStatus3{ Pending='Pending', Shipped='Shipped', Completed='Completed', Cancelled='Cancelled', Unknown='Unknown' } // 异构枚举 enum OrderStatus4{ Pending, Shipped, Completed='Completed', Cancelled='Cancelled', Unknown='Unknown' } //------0 1 Completed Cancelled Unknown
枚举类型
1、数字枚举
enum numEnum{ Pending, // 0 Shipped, // 1 Completed, // 2 Cancelled, // 3 Unknown // 4 }
2、字符串枚举
enum strEnum{ Pending = 'Pending', Shipped = 'Shipped', Completed = 'Completed', Cancelled = 'Cancelled', Unknown = 'Unknown' }
3、异构枚举
// 异构枚举就是枚举值中成员值既有数字类型又有字符串类型(但是不能有值是空的) // 异构 isomerism enum isomerismEnum{ Pending = 'Pending', Shipped = 'Shipped', Completed = 2, Cancelled = 'Cancelled', Unknown = 'Unknown' }
4、常量枚举
// 常量枚举,就是在定义枚举的语句之前加上const 关键字,这样编译后的代码不会创建这个对象,只是会从枚举里拿到相应的值进行替换 enum Status { Off, On } const enum Animal { Dog, Cat } const status = Status.On; const animal = Animal.Dog;
上面的代码编译成 JavaScript 之后是这样的:
var Status; (function(Status) { Status[(Status["Off"] = 0)] = "Off"; Status[(Status["On"] = 1)] = "On"; })(Status || (Status = {})); var status = Status.On; var animal = 0; // Dog
注意,枚举值是只读的,不能够修改。
二、表驱动
表驱动,就是为了去除if...else.. 和switch 这种语法的。
1,表驱动:
const orderHandlers: Record<number, (order: Order)=> void> = {
[OrderStatus.Pending]: function (order){
},
[OrderStatus.Shipped]: function (order){
},
}
2,枚举类型、常量枚举 区别在于生成 JS 代码, 常量枚举使用常量替换类型。
enum OrderStatus{
}
const enum OrderStatus{
}