Почему Typescript жалуется на возможное неопределенное значение, когда я проверяю, определено ли значение в предыдущей строке?

#javascript #typescript

#javascript #typescript

Вопрос:

У меня есть этот код, мне интересно, почему Typescript жалуется, функция isNextWeek ожидает строку, и здесь код жалуется, что аргумент типа string или undefined не может быть присвоен, но разве я не проверяю, определено ли localTime в проверке localTimeExists, поэтому он никогда не должен вызывать функцию, если онане определено.

Не уверен, почему он жалуется, или у кого-нибудь есть предложения, чтобы избежать этой проблемы. Мне удалось избежать этого, заключив его в условие «если», но затем это ограничивает значение для этого блока, и я хочу использовать его снаружи, поэтому подумал, есть ли другой способ. Спасибо

 const localTimeExists = !!out amp;amp; !!out.localTime;
const doThis = !isToday amp;amp; localTimeExists amp;amp; isNextWeek(out.localTime);
  

Комментарии:

1. Typescript не будет распространять условную информацию через localTimeExists переменную, которая просто имеет тип boolean . Если вы встроите это, это должно сработать.

2. Альтернативным решением было бы добавление восклицательного знака в конце переменной, т. е. isNextWeek (out.localTime!)

3. @Bergi Я сделал это встроенным, но хотел сделать код более читаемым и аккуратным, поэтому подумал, что я бы извлек условие в переменную. Итак, вы имеете в виду, что во второй строке функция isNextWeek не распознает это. localTime имеет значение из проверки в первой строке?

4. @jobe Речь идет об условном amp;amp; или if . Если с левой стороны / в условии out.localTime была проверена достоверность, typescript будет знать, что out.localTime это не будет undefined с правой стороны / в теле. Он не будет делать этот вывод, если вы проверяете localTimeExists только переменную.

5. @jcalz готово, надеюсь, это лучше

Ответ №1:

Ссылка на комментарий @Bergis, который сработал для меня — я заставил это работать, включив проверку правдивости, поскольку извлечение ее в отдельную строку запутало Typescript при создании вывода.