1.数字枚举和字符枚举
TS中支持两种枚举, 一种是数字枚举, 一种是字符串枚举。
(1)数字枚举
默认情况下就是数字枚举。
| enum Gender{ |
| Male, |
| Female |
| } |
| console.log(Gender.Male); |
| console.log(Gender.Female); |
复制
注意点:
数字枚举的取值默认从0开始递增。
数字枚举的取值可以是字面量, 也可以是常量, 也可以是计算的结果。
| const num = 666; |
| function getNum() { |
| return 888; |
| } |
| enum Gender{ |
| |
| |
| |
| Male = getNum(), |
| Female = 123 |
| } |
复制
(2)枚举反向映射
| enum Gender{ |
| Male, |
| Female |
| } |
| console.log(Gender.Male); |
| console.log(Gender[0]); |
复制
(3)字符串枚举
| enum Gender{ |
| Male = 'www.it666.com', |
| Female = 'www.itzb.com' |
| } |
| console.log(Gender.Male); |
| console.log(Gender.Female); |
复制
注意点:
如果使用字符串给前面的枚举值赋值了, 那么后面的枚举值也必须手动赋值。
和数字枚举不一样, 字符串枚举不能使用常量或者计算结果给枚举值赋值。
虽然字符串枚举不能够使用常量或者计算结果给枚举值赋值, 但是它可以使用内部的其它枚举值来赋值。
| const str = 'lnj'; |
| function getStr() { |
| return 'abc'; |
| } |
| enum Gender{ |
| Male = 'www.it666.com', |
| |
| |
| Female = 'www.itzb.com', |
| Yao = Female |
| } |
| console.log(Gender.Female); |
| console.log(Gender.Yao); |
复制
(4)异构枚举
枚举中既包含数字又包含字符串, 我们就称之为异构枚举。
| enum Gender{ |
| Male = 6, |
| Female = 'nv' |
| } |
| console.log(Gender.Male); |
| console.log(Gender.Female); |
| console.log(Gender[6]); |
| |
| |
| console.log(Gender); |
复制
2.枚举成员类型和联合类型
(1)枚举成员类型
我们可以把枚举成员当做类型来使用。
| enum Gender{ |
| Male = 'www.it666.com', |
| Female = 'www.itzb.com' |
| } |
| interface TestInterface { |
| age: Gender.Male |
| } |
| class Person implements TestInterface{ |
| age: Gender.Male |
| |
| |
| 所以这里写一个数值也不会报错 |
| |
| |
| |
| |
| 那么只能是枚举成员的值, 不能是其它的值 |
| |
| } |
复制
(2)联合枚举类型
联合类型就是将多种数据类型通过|连接起来。
| let value:(number | string); |
| value = 1; |
| value = 6; |
| value = "123"; |
| 我们可以把枚举类型当做一个联合类型来使用。 |
| enum Gender{ |
| Male , |
| Female |
| } |
| interface TestInterface { |
| age: Gender |
| } |
| class Person implements TestInterface{ |
| |
| age: Gender.Female |
| } |
复制
3.运行时枚举和常量枚举
(1)运行时枚举
枚举在编译之后是一个真实存储的对象, 所以可以在运行时使用。
而像接口这种只是用来做约束做静态检查的代码, 编译之后是不存在的。
| interface TestInterface { |
| name:string; |
| age:number; |
| } |
| enum Gender{ |
| Male, |
| Female |
| } |
复制
(2)常量枚举
普通枚举会生成真实存在的对象。
常量枚举不会生成真实存在的对象, 而是利用枚举成员的值替换使用到的地方。
| enum Gender1{ |
| Male, |
| Female |
| } |
| console.log(Gender1.Male === 0); |
| |
| const enum Gender2{ |
| Male, |
| Female |
| } |
| console.log(Gender2.Male === 0); |
复制