Type hinting

Вопрос, у меня есть переменная следующего типа:

var some :number | string;

some = 123;
some = "123";

Мне где-то в логике понадобилось сделать следующее:

some = parseInt( some );

Error:(8, 11) TS2345: Argument of type 'number | string' is not assignable to parameter of type 'string'. Type 'number' is not assignable to type 'string'.

Вроде бы все логично же, у нас есть трока, которую хотим привести к числу. Но вот что получается, функция parseInt() на вход может принимать только строку! А это уже другой тип.

declare function parseInt(value :string) :number;

А у нас тип (number|string) != string!

Как быть? И так, перебираем все, что приходит в голову:

parseInt( String(some) );
parseInt(some + '');
parseInt(`${some}`);
parseInt(some.toString());

Все эти способы рабочие, но(!) они накладывают оверхед на рантайм. Это вызов toString() у значения, которое уже представляет из себя строку. Либо вовсе создание нового объекта оберкти String() как в первом случае. А нам не нужно это. Мы-то знаем что у нас за занчение уже прдеставляет из себя строку. И опять вспоминаем про кастование типов:

some = parseInt( <string> some );

Мы сообщили анализатору что мы знаем что мы делаем и просьба не ругаться на нашу переменную.

results matching ""

    No results matching ""