Тип \"string\" не может быть назначен для типа \"number\"

Из заголовка казалось бы сразу становится понятно почему возникает ошибка в моем TypeScript скрипте. Но..

Ошибка возникает когда пробую такую конструкцию после добавления ".toFixed(2)":

topprice = openOrders[item].price.toFixed(2)

также пробовал

topprice = Number(openOrders[item].price).toFixed(2)

Вывод кода:

let topprice = 0, topsize = 0, lowprice=0, lowsize=0
console.log(typeof topprice,' ',topprice,' ',typeof openOrders[item].price,' ',openOrders[item].price)

Даёт результат:

введите сюда описание изображения

То есть получается что типы в обоих случаях - Number

Конструкция openOrders[item] имеет следующий вид одного элемента:

введите сюда описание изображения

У меня не получается понять в чем проблема, особенно учитывая что оба типа переменных к которым обращаюсь - Number.


Ответы (1 шт):

Автор решения: Ievgen

Решение было простым, вместо:

topprice = openOrders[item].price.toFixed(2)
topprice = Number(openOrders[item].price).toFixed(2)

Пишем:

topprice = Number(openOrders[item].price.toFixed(2))

Так как первые две строки - идентичны.

  1. openOrders[item].price - число, но после конвертации toFixed - становится строкой
  2. число конвертируется в число и в конце конвертируется toFixed в строку

Поэтому правильно решение все выражение (которое будет в итоге строкой) поместить полностью в функцию Number(...).

И по итогу число, которое мы пытаемся обрезать toFixed сначала конвертируется из числа в строку, а потом мы его обратно конвертируем в число.

→ Ссылка