下面是一个简单的打字代码示例.
// Example Setup
declare var foo:{bar?: {baz: string}};
function immediate(callback: () => void) {
callback();
}
// Type Guard
if (foo.bar) {
console.log(foo.bar.baz); // ✅ It works!
immediate(() => {
console.log(foo.bar.baz); // ❌ TS error : 'foo.bar' is possibly 'undefined'.(18048)
});
}
foo.bar
具有类型保护以确保它不是空值,实际上,foo.bar
被推断为类型{baz: string}
.
但是,我不知道为什么立即回调函数中会出现打字错误,说foo.bar
可能是未定义的.导致此错误的原因是什么?