#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 при создании вывода.