Ошибка 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
    }
  }
});

Надеюсь, это поможет; удачи!

Другие вопросы по тегам