2016-09-23 6 views

答えて

0

TypeScriptは完全にコンパイル側です。すべての静的型はJavaScriptに変換されると失われます。以下のようなものをやってからあなたを止めるものは何もありません:

let foo: { myProperty: string } = { myProperty: "g" }; // myProperty is non-nullable 

foo["myProperty"] = undefined; // bypass type checker! 
+3

これは正しいですが、そのコードは厳密なヌルチェックでコンパイルエラーをスローします。「タイプ未定義はタイプ文字列に割り当てられません」これは型チェッカーをバイパスしません。 –

6

NULL可能/ undefinednessチェックがどのように型システムモデルの種類でだけ変更です。いつものように、これはすべて型チェックフェーズ中に発生し、実行時にこれを強制するために送出されるJavaScriptには何もありません。

とにかく、タイプは、ドメインの値がと考えることができます。たとえば、booleanのドメインは通常、2つの値truefalseです。 stringは、"hello""world"などすべての文字列を含む無制限のドメインです。

TypeScriptは、あるタイプの位置で値が使用されるとき、その値がそのタイプのドメインにあることをチェックします。たとえば、truenumberのドメインには含まれていないため、が期待されるtrueを使用しようとすると違法です。

厳密なヌルチェックなしのタイプスクリプトでは、nullおよびundefinedはすべてのタイプのドメインにあります。したがって、タイプbooleanは、実際にの4つのの値を持っています:true,falseundefined、およびnullです。 undefinednullは、正確にはtruefalseのように振る舞いませんので、人々が通常発見するように、これは悪いです。プロパティとメソッドを持つものについては、substrstringのドメインのすべての値のメソッドとして存在し、nullundefinedを除いて存在するので、それはひどいです。厳しいヌルチェックと活字体

、あらゆる種類のドメインのうち、自分のタイプにnullundefined動きます。値nullは、stringのドメインに存在しないため、stringが予想される場所では使用できません。タイプstring | nullは、stringドメインまたはの特別な値であるかもしれない値を表します。null

この説明は、Anders Hejlsberg's talk from Build 2016 starting around 44:30から適応されています。あなたが想像しているように、彼は私よりも上手く説明してくれます。

関連する問題