扩展类型:类型别名、枚举、接口、类。
字面量类型的问题
- 在类型约束位置,会产生重复代码,可以使用类型别名解决该问题
- 逻辑含义和真实的值产生了混淆,会导致修改真实的值的时候,产生大量的修改
- 字面量类型不会进入到编译结果,比如我们想循环便利它的值,那么就不行。
所以需要使用枚举
如果定义一个枚举
enum Gender{
male = "男",
female = "女"
}
Gender.male
Gender.female
枚举的规则
- 枚举字段的值只能是 字符串或者数字
- 数字枚举的值,会自动自增。不指定初始值,那么从 0 开始。
enum Level {
level1 = 1,
level2,
level3
}
// 数字枚举编译后的结果跟字符串不太一样,以上面的为例
// 编译后
{
level1: 1,
level2: 2,
level3: 3,
1: level1,
2: level2,
3: level3
}
最佳实践
- 尽量不要在一个枚举中,即出现数字,又出现字符串
- 使用枚举的时候,尽量使用枚举的名称
枚举的位运算
类似于 react 源码中,类型的判断,通过位运算,给予权限
enum Permission {
Read = 1,
Write = 2,
Create = 4,
Delete = 8
}
// 组合权限:let p = Permission.Read | Permission.Write
// 判断是否拥有某个权限: let flag = p & Permission.Read
// 删除某个权限: p = p ^ Permission.Read