ts只允许我们访问联合数据类型的共有属性和方法;
如果不是共有的不能访问
1.枚举类型是ts为数不多的特有类型之一
枚举其实是将每一个可能出现的值一个个的列出来,定义在类型中,这个类型就是枚举类型 枚举允许开发者定义一组命名常量,常量可以是数字,字符串类型
enum Direction{ LEFT,//0 TOP,//1 CENTER//2 BOTTOM//3
} enum Direction{ LEFT=100,//0 TOP=200,//1 CENTER=300//2 BOTTOM=400//3
} enum Direction{ LEFT=100,//0 TOP,//1 CENTER//2 BOTTOM//3
} enum Direction{ LEFT='LEFT',//0 TOP='TOP',//1 CENTER='CENTER'//2 BOTTOM='BOTTOM'//3
}
function turnDirection(direction:Direction){ } turnDirection(Direction.LEFT)
- 枚举分为两种:字符串到字符串之间的映射和字符串到数字之间的映射。即key和value反向对应的对象,如下所示:
- 不必为枚举中的所有成员都赋值,ts会尽其所能推导出缺少的值:
- 枚举的值可以为字符串,甚至混用字符串和数字
- ts比较灵活,允许通过值访问枚举,也允许通过键访问枚举,不过容易导致问题
- 利用js实现enum
- 实现key-value的反向对应的对象
- 不可修改
使用const emun的好处,加入需要使用的enum特别多,那在执行时就会不停地使用 IIFE 产生 Object 将 Key 和 Value 绑定到 Object,会造成一些效率上的损失,也会增加内存,但是 const 并不会产生 Object ,也就不会有以上的问题。 就算到的 Enum 不多,判断时也需要一直从 Object 中找出对应的值,而如果是用 const 声明 Enum ,在编译成 JS 时就将声明的值直接放入判断中。 const enum的内插行为带来的安全问题 const enum内插值的行为在从其他人编写的TypeScript代码中导入const enum时可能导致安全问题:假如原作者在你编译TypeScript 代码之后更新了const enum,那么在运行时你使用的枚举与原作者的枚举指向的值可能不同,而TypeScript没有这么智能,无法得知这一变化。