TS检查类型报错“元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型”
问题报错
src/assets/icons/icons.ts中的内容如下:
问题定位
从报错信息可以看出是TS的类型检查报错(不影响项目编译),是因为动态索引使用了string类型,但是icons.ts文件中没有预设索引的类型,从而引发了报错。
原理
JS是弱类型语言,所有类型可以隐式转换,比如你希望将number类型的变量变为string,直接加引号即可
// An highlighted block
let num = 1;
num = '1' //这时num变量已经由number类型自动转换为string类型了
但是TS是微软开发的类似于c或者java等语言的强类型语言,不会做任何的隐式转换,类型不对会直接报错。
解决方式
最开始尝试了直接修改icons.ts中的属性的类型,即
这种操作还是局限于JS这种弱类型语言的隐式转换了,自然也是碰壁了。
在TS中,需要显式的声明attribute的类型,即如下:
至此,TS的检查类型不会再报错。
后言
相信大家根据代码也看出我在做什么了,没错就是封装本地的svg图标库,网上教程参差不齐,各种安装插件,下一篇文章介绍如何封装本地svg图库,不需要任何插件。