使用匿名函数/谓词时,类型防护停止工作

问题描述 投票:0回答:1

这是一个基本示例。

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; // <--- 
  }
}

我该如何解决这个问题?

typescript
1个回答
0
投票

我找到了办法;将“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];
    });
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.