TypeScriptが以下のようなタイプミスマッチを投げないのはなぜですか?TypeScript型の算術演算がチェックされないのはなぜですか?
(n : number, m : number) => number
が、また+
オペレータのための1つを実装することが可能になります:
undefined * 1 === NaN
それは些細なことでしょうのために型チェックを実装しますか?
TypeScriptが以下のようなタイプミスマッチを投げないのはなぜですか?TypeScript型の算術演算がチェックされないのはなぜですか?
(n : number, m : number) => number
が、また+
オペレータのための1つを実装することが可能になります:
undefined * 1 === NaN
それは些細なことでしょうのために型チェックを実装しますか?
TypescriptはJavaScriptのスーパーセットとして定義されています。その操作を制限することは、TSでそうでなければ有効なJSコードを使用することを禁じます。
ので、名前に「数でない」一方で、特殊なケースのようなものです確かに、しかし、個人的に私はTypeSciptが今までのNaN
NaN
を生産するから私を防ぐために試してみたいと思い、それNumber型の領域にあります(主にIEEE-754実装の根底にあるためです)。いずれにしても、必要な/希望する場合は、独自のより厳密な型(例:折り返し番号)を作成できます。
あなたは、コンパイラに基づいてNaN
値を取得に対して本当に安全ガードは、ここでの例ですができません。
function mul(x: number, y: number): number {
return x * y;
}
function getDataFromServer(): Promise<number> {
// async request which returns a number
}
getDataFromServer().then(num => mul(num, 2));
コンパイラは、サーバーが返すものを知る方法はありません。
数値の文字列表現("2"
)の場合もありますが、それは"internal server error"
である場合もあります。
実行時にコード内でそれらのものをチェックできますが、コンパイラはそれを静的に認識できません。
申し訳ありませんが、これがどのように答えているのかわかりません。getDataFromServerを実装すると、返されたサーバーが何か数値を生成するか、または約束のエラーを通知する必要があります。コンパイラがそれを静的にどのように表しているのかOPより厳しい署名をしていない数値演算子を求めるOPとは関係ありません –
@BartekBanachewicz私の答えで書いたように、開発者は 'getDataFromServer' 'number'を返しますが、コンパイラが'数値 '、' NaN'かどうかなどを知ることができないことを示しています。 –
ソケットからのデータは通常、 "バッファ"または "文字列"(これは他の手段で作成することができます)とタイプされています。それは数学演算子の署名と何が関係していますか? –
しかし、 'undefined * 1'は有効なjavascript文ですが、なぜコンパイラに問題がありますか? –
@NitzanTomer確かに、個人的にはTypeSciptがNaNを生成しないようにしたいと思っています。 – Kriegslustig
原因... Javascript :( – Ray