Typescript kastar ett "Objekt är möjligen 'null'"-fel, trots typkontroll
Jag har ett TypeScript-beteende som jag inte förstår, och jag skulle vilja ha din syn på det.
Kompilatorn ger mig ett "Objekt kan möjligen vara 'null'" fel även om det finns en typkontroll innan.
Här är ett förenklat exempel:
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
}
Så varför varnar kompilatorn mig om jag får tillgång till den eventuellt null-egenskapen inom ett funktionsanrop, även om det fångande if-kontrollen kontrollerar det?
Tack i förväg!
Svar #1
Detta är avsiktligt. TypeScript antar inte att typkontroller förblir aktiva i callback-funktioner eftersom det är farligt att göra denna antagelse.
Fixa
Fånga variabeln lokalt för att säkerställa att den inte ändras externt och TypeScript kan enkelt förstå det.
if (foo.bar) {
const bar = foo.bar;
functionDoingSomeStuff(() => {
console.log(bar.a) // no compiler error
})
}
