打字稿抛出"Object is possibly 'null'"错误,尽管类型保护



我有一个我不会取消的 Typescript 行为,我希望得到您的意见。

编译器向我抛出">对象可能是'null'"错误,即使之前有类型检查。

下面是一个简化的示例:

class Bar {
public a: string
}
class Foo {
public bar: Bar | null
}
function functionDoingSomeStuff(callback: any) {
callback()
}
const foo = new Foo()
if (!foo.bar) {
return new Error()
}
console.log(foo.bar.a) // no compiler error thanks to the previous if
if (foo.bar) {
functionDoingSomeStuff(() => {
console.log(foo.bar.a) // a compiler error
})
console.log(foo.bar.a) // no compiler error
}

那么,如果我访问函数调用中的可能为 null 属性,编译器为什么会警告我,即使捕获if检查了它?

提前感谢!

这是设计使然。TypeScript 不假设类型保护在回调中保持活动状态,因为做出这种假设是危险的。

修复

在本地捕获变量以确保它不会在外部更改,TypeScript 可以轻松理解这一点。

if (foo.bar) {
const bar = foo.bar;
functionDoingSomeStuff(() => {
console.log(bar.a) // no compiler error
})
}

相关内容

  • 没有找到相关文章

最新更新