我有一个我不应该理解的打字稿行为,我希望得到您的投入。
即使之前进行类型检查,编译器也会向我抛出“ 对象可能为'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
}
那么,即使捕获的 if 对其进行了检查,为什么我访问函数调用中可能为null的属性时,编译器还会警告我呢?
谢谢!
答案 0 :(得分:6)
这是设计使然。 TypeScript不假定类型防护在回调中保持活动状态,因为这样做很危险。
在本地捕获变量以确保它不会在外部被更改,并且TypeScript可以轻松理解。
if (foo.bar) {
const bar = foo.bar;
functionDoingSomeStuff(() => {
console.log(bar.a) // no compiler error
})
}