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 );
Мы сообщили анализатору что мы знаем что мы делаем и просьба не ругаться на нашу переменную.