Element implicitly has an 'any' type because expression of type 'string' can't be used to index type
- 出现原因
- 解决方案
- 方案一,修改tsconfig
- 方案二,写一个函数转类型
- 方案三:定义一个string作为key的类型
中文报错:元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型 “UserInfo”。
出现原因
在前端项目中遇到在用字符串当对象的key时报错
解决方案
方案一,修改tsconfig
"suppressImplicitAnyIndexErrors": true,
方案二,写一个函数转类型
export function isValidKey(key: string | number | symbol , object: object): key is keyof typeof object {
return key in object;
}
for (const key in obejct) {
if(isValidKey(key,obejct)){
// 处理...
obejct[key]
....
}
}
以上两种过于粗暴建议使用第三种
方案三:定义一个string作为key的类型
const modules: Record<string, object> = {}
const files = require.context('./modules', false, /\.ts$/)
files.keys().forEach((key) => {
modules[key.replace(/(modules|\/|\.|ts)/g, '')] = {
...files(key).default,
namespaced: true
}
})
const store = createStore({ modules })
写一个类型,表明key是字符串,value要看各位自己的需要定义。
我的项目中value是object,所以写object。
后面再用字符串当key遍历对象,typescript就不会报错了!