на то, что я пытаюсь сравнить число с, возможно, строкой. Разве это не его основная функция – спасити меня от подобных ошибок типизации?
Strict стоит?
strict тут не при чем, просто все операции в твоем примере могут производится и со строкой, что бы такого избежать лучше явно указывать типы в "критических" для этого местах (в твоём случае - для count)
При чем в примере где было бы явно видно что присутствие строки гарантировано - ты бы получил ошибку. Добро пожаловать в удивительный мир Typescript :)
А нет, это часть спецификации, вот цитата 4.19.3 The <, >, <=, >=, ==, !=, ===, and !== operators These operators require one or both of the operand types to be assignable to the other. The result is always of the Boolean primitive type. то есть эти операторы работают если хотя один тип операнда может быть присвоен второму, а в твоем примере операнд типа number может быть присвоен операнду string|number
Явно указал и добавил ещё один пример с аргументом функции. Ничего не изменилось.
Имелось ввиду проставить явный number для count, так как именно он сравнивается с i:number что по мнению спецификации тайпскрипта - нормально.
Всё дело в том, что я реальную багу вчера допустил из-за этого. Пример, который Вы видите – это модифицированная версия, т.к. я не могу показывать свой код. Я забыл, что у меня поле может быть числом, а может быть строкой, и в одном месте программы не проверил это и описал только алгоритм для числа, в итоге долго дебажил. Неприятно.
Это нормально, тайпскрипт это не 100% type safety.
Обсуждают сегодня