Я пинговал Тициан Черникова-Драгомир в Твиттере об этом, потому что вы говорили, что определенно не было ошибки, но я не мог себе представить настройку, которая могла бы повлиять на это. Есть один!
Вы, кажется, отключили noImplicitAny
. Когда это отключено, TypeScript не так старается уточнить типы переменных, которые неявно имеют тип any
, например ваш myEcho
. Поэтому TypeScript не знает, что возвращает myEcho("hi")
, и позволяет не сообщать о присвоении вашей переменной myInt
go. Вот пример на игровой площадке TypeScript с отключенным noImplicitAny
.
При включенном noImplicitAny
(лучшая практика) этот код выдает ошибку компилятора TypeScript в операторе myInt = myEcho("hi");
:
Тип «логический» не может быть назначен типу «число».
Оперативное копирование, показывающее здесь ошибку
Но даже при возникновении ошибки поведение компилятора TypeScript по умолчанию все равно будет выводить JavaScript (если может, и может в этом случае). Таким образом, в runtime вы видите описанное вами поведение, потому что myInt
содержит boolean
(из myEcho
), а не number
, и вы используете JavaScript ' Оператор времени выполнения typeof
.
Отслеживать ошибки компилятора TypeScript. Вот где вы найдете ошибки типа, подобные этой.
Вы также можете указать TypeScript , а не выводить JavaScript, когда есть ошибка, используя опцию компилятора --noEmitOnError
.