TS的枚举类型enum
2022-03-31 13:01:59 1 举报
AI智能生成
前端开发,TS学习,枚举类型,enum
作者其他创作
大纲/内容
枚举类型用于定义数值集合
事先考虑某一个变量的所有可能的值,尽量用自然语言中的代词表示它的每一个值
比如性别(男女)、月份(1-12)、星期(一-日)、颜色(红橙黄绿蓝靛紫)...
枚举的本质
我们以上面的枚举为例:
编译后的 .js 文件:编译工具:https://www.typescriptlang.org/play
步骤分析
第一步 var Gender
声明一个 Gender 变量 并且初始值 是 空对象
第二步 (function (Gender) {...})(Gender || (Gender = {}));:
将 Gender 对象 作为自执行函数的 实参传入
第三步 Gender["GIRL"] = 0 :
给 Gender 对象 的 “GIRL” 属性赋值为 0
Gender = {
"GIRL" : 0,
“0”:“GIRL”,
"BOY": "1",
"1": "BOY"
}
"GIRL" : 0,
“0”:“GIRL”,
"BOY": "1",
"1": "BOY"
}
第四步 Gender[Gender["GIRL"] = 0] = "GIRL" :
给 Gender 对象 新增一个 属性名为“0” 的属性,并且给其赋值为 "GIRL"
以此类推...
所以最终结果是
Gender = {
"GIRL" : 0,
“0”:“GIRL”,
"BOY": "1",
"1": "BOY"
}
"GIRL" : 0,
“0”:“GIRL”,
"BOY": "1",
"1": "BOY"
}
这也是为什么 枚举 可以正反向同时映射的原因。
正向映射即:name => value
反向映射即: name <=> value
几种常见的枚举
数字枚举
当我们声明一个枚举类型时, 它们的值其实是默认从0开始依次累加的数字类型;
当我们把第一个值赋值后,后面也会根据第一个值进行累加:
字符串枚举
字符串枚举不支持反向映射
异构枚举
通常情况下我们很少会这样使用枚举,但是从技术的角度来说,它是可行的。
常数枚举
在声明枚举前加一个 const 声明
枚举成员的类型
枚举成员分为 常量枚举成员 const 和 需要被计算的枚举成员 computed
常量枚举成员
没有初始值的枚举成员
对已有枚举成员的引用
常量表达式
常量枚举成员 会在编译时 就计算出结果,然后以常量的形式出现在 运行环境
需要被计算的枚举成员
一些非常量的表达式
需要被计算的枚举成员 在编译时 结果被保留,在运行时才会被计算
注意
在 computed 之后的枚举成员一定要赋值,否则会抛错
枚举类型与
枚举成员的类型
枚举成员的类型
在某些情况下,枚举和枚举成员都可以作为一种类型使用
枚举类型与枚举成员类型使用
1、枚举成员没有任何初始值
2、枚举成员都是数字类型
3、枚举成员都是字符串类型
(整个枚举不能作为类型使用,只能使用枚举成员作为类型)
(整个枚举不能作为类型使用,只能使用枚举成员作为类型)
两个枚举之间不可以进行比较
枚举合并
我们可以分开声明枚举,他们会自动合并
编译为 JavaScript 后的代码
0 条评论
下一页