我正在尝试为我的项目打开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语句中?我该如何解决这个问题,这样才能避免出现此错误?
答案 0 :(得分:2)
控制流分析为hard。这里的问题是编译器不知道是否,何时或如何调用回调。因此,在toaster.brandName
回调内部,string | undefined
从(大概)string
到array.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
}
}
});
希望有所帮助;祝你好运!