Typescript for in 报错的问题请教

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,

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632