Задать вопрос
@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?
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 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 коде, то проверку на верность типа переданного аргумента вам надо осуществлять самостоятельно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы