什么是索引器
我们都知道,ts 中 获取对象中的属性有好多种方式
1.通过点的方式来进行获取
2.通过属性表达式的方式进行获取
3.通过获取对象的属性描述符进行获取
我们获取属性的第二种方式,对象[值],使用成员表达式就叫做是索引器,索引器里面的内容不是ts 新增,这里只讨论如何ts 如何给索引器添加类型检查
不用索引器存在的问题
对象赋值绕过ts 检查
解决办法
在TS中,默认情况下,不对索引器(成员表达式)做严格的类型检查使用配置noImplicitAny:true开启对隐式any的检查。
隐式any:TS根据实际情况推导出的any类型
索引器特征
- 在索引器中,键的类型可以是字符串,也可以是数字
- 在类中,索引器书写的位置应该是所有成员之前
class User{ [props:string]:any // 这里的any 可以是 联合类型等 name:string = 'cll' age: number = 9 } const u = new User(); u['pid'] = '123'
TS中索引器的作用
- 在严格的检查下,可以实现为类动态增加成员
- 可以实现动态的操作类成员
在JS中,所有的成员名本质上,都是字符串,如果使用数字作为成员名,会自动转换为字符串。
在TS中,如果某个类中使用了两种类型的索引器,要求两种索引器的值类型必须匹配