Ошибка 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
}
}
});
Сообщение об ошибке имеет toaster.brandName
подчеркнуто в операторе if со следующим текстом ошибки: error TS2532: Object is possibly 'undefined'.
Если объект хорошо использовать в строке y = выше, почему это будет проблемой для использования в операторе if? Как я могу это исправить, чтобы он прекратил ошибаться?
1 ответ
Анализ потока управления сложно. Проблема здесь в том, что компилятор не знает, будет ли или когда или как будет вызываться обратный вызов. Так сужение 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
}
}
});
Надеюсь, это поможет; удачи!