Typescript strictNullChecks 错误时不可能

Typescript strictNullChecks error when not possible

我正在尝试为我的项目启用 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语句中使用?我怎样才能解决这个问题,这样它就不会再出错了?

控制流分析是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
    }
  }
});

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