Поехали дальше. Как вы думаете, какой тип прописан в TS для аргумента val в Number.isFinite(val)?
Прежде чем ответить, посмотрите спеку метода: tc39.es/ecma262/#sec-n…
- если val равен NaN, +-Infinity или не Number, то верни false
- в остальных случаях верни true
⬇️
Разумно было бы предположить, что сигнатура будет такой:
isFinite(val: unknown): boolean
Но TS считает, что правильнее типизировать так:
isFinite(val: number): boolean
Ну знаешь, передай мне намбер, а я скажу тебе намбер это или не намбер.

Тут можно возразить, типа "передай намбер, чтобы узнать инфинити это или нет". Но у нас нет метода isInteger, а typeof NaN сломан. Поэтому у меня нет другого способа узнать число или нет, кроме isFinite.
У TS была другая мотивация на самом деле github.com/Microsoft/Type…
Это для твой безопасности, сынок. Чтобы ты вместо isFinite(getNumber()) случайно не написал isFinite(getNumber)
В TS 3.8 починили конечно github.com/microsoft/Type… но осадок остался.
Ясно понятно.
