这是一个基本示例。
type Foo = {
a?: Record<string, number>;
}
function processFoo(foo: Foo){
// Type Guard here
if (foo.a){
console.log(foo.a); // Is fine here
Object.keys(foo.a).forEach((key) => {
// but not here!
foo.a[key] //'foo.a' is possibly 'undefined'.(18048)
})
}
}
这里我使用类型保护来检查
foo.a
是否存在,但 TypeScript 似乎忘记了在匿名函数出现时该属性已经存在。
这是因为从技术上讲我可以做这样的事情:
function processFoo(foo: Foo){
// Type Guard here
if (foo.a){
console.log(foo.a); // Is fine here
Object.keys(foo.a).forEach((key) => {
// but not here!
foo.a[key] //'foo.a' is possibly 'undefined'.(18048)
});
foo.a = undefined; // <---
}
}
我该如何解决这个问题?
我找到了办法;将“foo.a”存储在局部变量中效果很好。
type Foo = {
a?: Record<string, number>;
};
function processFoo(foo: Foo) {
if (foo.a) {
const a = foo.a;
Object.keys(a).forEach(key => {
a[key];
});
}
}