Ошибка TypeScript strictNullChecks, когда это невозможно - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь включить параметр 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 Ответ

2 голосов
/ 01 апреля 2019

Анализ потока управления составляет жесткий . Проблема здесь в том, что компилятор не знает, будет ли или когда или как будет вызываться обратный вызов. Таким образом, сужение 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
    }
  }
});

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

...