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
缩小到 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
}
}
});
希望对您有所帮助;祝你好运!
我正在尝试为我的项目启用 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
缩小到 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
}
}
});
希望对您有所帮助;祝你好运!