Skip to content
标签
note
字数
346 字
阅读时间
2 分钟

元素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型 "Object"

key 值的类型不是 string,在 javascript 中是默认给你转好的,而在 Typescript 中则不是,因此要么转,要么声明,要么忽略…

方案一:忽略
在 tsconfig.json 中 compilerOptions 里面新增忽略的代码,如下所示,添加后则不会报错

ts
"suppressImplicitAnyIndexErrors": true

方案二:声明
在定义的 Interface 里对其进行声明,如下所示,声明过后,也不会再报错

ts
interface DAMNU_ENABLE {
    ....
    [key: string]: boolean, // 字段扩展声明
}; 

[key: string]: boolean, // 字段扩展声明 声明之后可以用方括号的方式去对象里边的值

方案三:对其使用 keyof 进行判断

ts
export function isValidKey(
    key: string | number | symbol,
    object: object
): key is keyof typeof object {
    return key in object;
}

定义一个函数isValidKey(),然后对需要使用到的地方进行一次判断

for (const key in obejct) {
	if(isValidKey(key,obejct)){
		// 处理...
		obejct[key]
		....
	}
}

这三种方式都可以解决如题的报错信息,但是个人比较倾向于第二种或者第三种,并不是第一种不好,只是说,写第一种有一点点写 any 的感觉,不到万不得已不这么弄;

参考

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写