@bugsoff

Почему JavaScript интерпретирует переменную цикла как типа string?

Пишу на TypeScript.
Есть функция, ей в параметрах передаётся шаг внутреннего цикла for, вот так:
function loop(step: number) {
    for (let i:number = 0; i < 100; i += step as number)
        console.log(i);
}
loop(10);


Проблема в том, что после трансляции кода в JavaScript переменные i и step начинают интерпретироваться как строки со второй итерации цикла.
То есть этот код пишет в консоль не 10 чисел (0, 10, 20 ... 90), как можно было бы предположить, а только два:
0, 010
- первое число (number), второе строка (string) и заканчивает выполнение цикла.

Как сделать чтобы переменная i оставалась типа number?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Не нужно явно писать типы там, где typescript способен вывести их сам. И тем более нужно избегать приведения типов через as:
function loop(step: number) {
    for (let i = 0; i < 100; i += step)
        console.log(i);
}
В данном коде нет ошибки, ошибка в другом месте. Typescript вообще не меняет логику в выходном javacript. Я бы поискал другие места, где Вы вызываете эту функцию. Где-то Вы передаете в нее строку, убедив typescript через оператор as, что это число.
Тут важно понять, что от as ничего не останется в javascript, typescript не сгенерирует приведение типов за Вас.
Ответ написан
Комментировать
Aetae
@Aetae Куратор тега JavaScript
Тлен
TypeScript работает только на этапе компиляции. Если вы хотите использовать скомпилированную функцию в обычном javascript коде, то проверку на верность типа переданного аргумента вам надо осуществлять самостоятельно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы