打字稿strictNullChecks错误(不可能时)

时间:2019-04-01 17:57:58

标签: typescript strictnullchecks

我正在尝试为我的项目打开strictNullChecks设置,但是以下代码段中存在一个非常奇怪的错误:

toasters.forEach((toster: ToasterObject) => {
  if (toaster.brandName) {
    //This line works just fine
    let y = toaster.brandName.toLowerCase() === 'test brand name';

    //This line has the error
    if (!itemsArray.some(item => item.brandName.toLowerCase() === toaster.brandName.toLowerCase())) {
        //do stuff
    }
  }
});

错误消息的if语句中用以下错误文本对toaster.brandName进行了下划线:error TS2532: Object is possibly 'undefined'.如果可以在上面的y =行上使用该对象,为什么使用会出现问题在if语句中?我该如何解决这个问题,这样才能避免出现此错误?

1 个答案:

答案 0 :(得分:2)

控制流分析为hard。这里的问题是编译器不知道是否,何时或如何调用回调。因此,在toaster.brandName回调内部,string | undefined从(大概)stringarray.some()的范围不再有效。如果您想帮助编译器,则应将toaster.brandName的已知定义值分配给const,编译器希望它始终保持相同的窄类型:

toasters.forEach((toster: ToasterObject) => {
  if (toaster.brandName) {
    const toasterBrandName = toaster.brandName; // string, now and forever

    if (!itemsArray.some(item => item.brandName.toLowerCase() === toasterBrandName.toLowerCase())) {
        //do stuff
    }
  }
});

希望有所帮助;祝你好运!