🔥

Тред (Назим Гафаров)


Поехали дальше. Как вы думаете, какой тип прописан в 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 Ну знаешь, передай мне намбер, а я скажу тебе намбер это или не намбер.
notion image

Тут можно возразить, типа "передай намбер, чтобы узнать инфинити это или нет". Но у нас нет метода isInteger, а typeof NaN сломан. Поэтому у меня нет другого способа узнать число или нет, кроме isFinite.

У TS была другая мотивация на самом деле github.com/Microsoft/Type… Это для твой безопасности, сынок. Чтобы ты вместо isFinite(getNumber()) случайно не написал isFinite(getNumber) В TS 3.8 починили конечно github.com/microsoft/Type… но осадок остался.

Ясно понятно.
notion image