首页 > 解决方案 > 打字稿说 pa 可以在 if (pa !== undefined) 的正文中未定义

问题描述

type T = {
    a?: {[key:string]:boolean}
}
const f = (p: T):void => {
    if (p.a !== undefined) {
        Object.keys(p.a).forEach(k => { p.a[k] = false;})
    }
}

pa inp.a[k]错误地用消息下划线:“对象可能是'未定义'。(2532)”。

改变没有帮助if (p.a !== undefined) {if (!p.a) {

标签: typescriptundefined

解决方案


问题取决于范围。

p.a[k] = false;在您为 forEach 循环声明的函数内运行。该函数不在检查 是否存在的同一范围内p.a,因此,打字稿不能保证p.a不会未定义。

更多信息可以在这个相关问题中找到https://github.com/Microsoft/TypeScript/issues/30576

您可以通过多种方式解决此问题。一种明显但奇怪的方式可能是:

if (p.a !== undefined) {
  Object.keys(p.a).forEach(k => {
    if (p.a !== undefined) {
      p.a[k] = false
    }
  })
}

另一个,如果p.a只是您输入的对象文字,则可能是:

for (let k in p.a) {
  p.a[k] = false
}

你甚至不需要在if (p.a !== undefined) {这里检查。


推荐阅读