Typescript for in 报错的问题请教
menuShow 是一个对象,现在需要遍历
for (let [key, val] of Object.entries(menuShow)) {
if(key != 'rightMenu') menuShow[key] = false
}
for (let i in menuShow ) {
if(i != 'rightMenu') menuShow[i] = false
}
menuShow[key] 报错 "string" 的表达式不能用于索引类型an; }"。
menuShow[i] 报错 "string" 的表达式不能用于索引类型an; }"。
但运行正常
设置不报错的方法我知道.
问题是怎么写才是合法的,
对象menuShow的键不是string类型,而是其包含的键名称类型。换句话说,它们是字符串文本,这是比简单的string更窄的类型,不能被更宽的string类型索引。
编译示例的一种简单方法是将键数组转换为元组:
const menuShowKeys= ['menuShow中的键1', 'menuShow中的键2'....更多] as const;//预先提取menuShow所有键出来
这有效地将类型从string[]更改为['menuShow中的键1', 'menuShow中的键2'....更多],现在映射到它们时,它们将是索引对象的正确类型。作为补充说明,没有必要显式设置key的类型,因为这可以从用法中推断出来。
或者
for (let [key, val] of Object.entries(menuShow)) {
if (key != 'rightMenu') {
menuShow[key as keyof typeof menuShow] = false
}
}
for (let i in menuShow) {
if (i != 'rightMenu') menuShow[i as keyof typeof menuShow] = false
}
对象不是数组,不能用下标的形式去遍历,但是看你报错的信息,你的menuShow 是个数组啊
```
除了ts-ignore我只想到用as
let menuShow = {
rightMenu: true,
leftMenu: true,
topMenu: true,
bottomMenu: true,
}
for (let [key, val] of Object.entries(menuShow)) {
if (key != 'rightMenu') {
menuShow[key as keyof typeof menuShow] = false
}
}
for (let i in menuShow) {
if (i != 'rightMenu') menuShow[i as keyof typeof menuShow] = false
}
tsconfig.json 加 "suppressImplicitAnyIndexErrors":true,
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!