私は一般的な説明として、コンパイラは静的型チェックを行いますが、nullable型が誤って動作しないことを検証するためにコンパイラが特に使用するメソッドは何ですか?Typescript 2はnullを許可しない型をどのように強制しますか?
答えて
TypeScriptは完全にコンパイル側です。すべての静的型はJavaScriptに変換されると失われます。以下のようなものをやってからあなたを止めるものは何もありません:
let foo: { myProperty: string } = { myProperty: "g" }; // myProperty is non-nullable
foo["myProperty"] = undefined; // bypass type checker!
NULL可能/ undefinednessチェックがどのように型システムモデルの種類でだけ変更です。いつものように、これはすべて型チェックフェーズ中に発生し、実行時にこれを強制するために送出されるJavaScriptには何もありません。
とにかく、タイプは、ドメインの値がと考えることができます。たとえば、boolean
のドメインは通常、2つの値true
とfalse
です。 string
は、"hello"
と"world"
などすべての文字列を含む無制限のドメインです。
TypeScriptは、あるタイプの位置で値が使用されるとき、その値がそのタイプのドメインにあることをチェックします。たとえば、true
はnumber
のドメインには含まれていないため、が期待されるtrue
を使用しようとすると違法です。
厳密なヌルチェックなしのタイプスクリプトでは、null
およびundefined
はすべてのタイプのドメインにあります。したがって、タイプboolean
は、実際にの4つのの値を持っています:true
,false
、undefined
、およびnull
です。 undefined
とnull
は、正確にはtrue
とfalse
のように振る舞いませんので、人々が通常発見するように、これは悪いです。プロパティとメソッドを持つものについては、substr
がstring
のドメインのすべての値のメソッドとして存在し、null
とundefined
を除いて存在するので、それはひどいです。厳しいヌルチェックと活字体で
、あらゆる種類のドメインのうち、自分のタイプにnull
とundefined
動きます。値null
は、string
のドメインに存在しないため、string
が予想される場所では使用できません。タイプstring | null
は、string
ドメインまたはの特別な値であるかもしれない値を表します。null
この説明は、Anders Hejlsberg's talk from Build 2016 starting around 44:30から適応されています。あなたが想像しているように、彼は私よりも上手く説明してくれます。
- 1. Javaはnull許容型を許可していますか?
- 2. 計算列のデータ型をNULLを許可しないビットフィールドに強制するにはどうすればよいですか?
- 3. 強制的にNULLポインタの逆参照を許可する
- 4. どのようにして列にnullを許可し、NULLを許可しない列にNULLを許可しないようにすることができます
- 5. NULLを許可しないように列を変更します
- 6. 存在しないプロパティを強制的にnullにするにはどうすればよいですか?
- 7. イオン2:どのようにキャッシュページを強制できますか?
- 8. 不可能 - 変数/ファクトを定義しないように強制します
- 9. wx.Panelをどのように強制的にリフレッシュしますか?
- 10. EclipseのOSフラグはどのように強制しますか?
- 11. Cythonエラー:GILなしで許可されていないのPythonから強制
- 12. テーブルにNULL値を許可しないようにする方法
- 13. コピーファイルはどのように古い許可を保持していますか?
- 14. WIFはどのように[許可]と対話しますか?
- 15. どのようにhive.mapred.mode = nonstrictを許可しますか?
- 16. 認証:許可するページを更新するように強制しました
- 17. Chromeでローカルサイトを強制的にHTTPSにしないようにしますか?
- 18. Stylelintがベンダープレフィックスのアルファベット順を強制しないようにしますか?
- 19. Code Firstプロパティで強制的にnullを許可する方法はありますか?
- 20. コールバックを強制的に処理するよう強制しますか?
- 21. ジェネリックのTypescript型ガードは強制されません
- 22. Gmailメールはどのようにホバー効果を許可していますか?
- 23. MySQL Insert SelectがNOT NULL制約を強制しない
- 24. シミュレータでFace IDを許可してアプリのFace IDを許可しないようにテストするにはどうすればよいですか?
- 25. 構造体のフィールドに何らかの型を強制するにはどうしたらいいですか?
- 26. nullを許可しない型のASP.NET MVC 5モデルの検証(Int32)
- 27. プッシュを強制的に許可するかどうかをテストするにはどうすればよいですか?
- 28. GitHub android appはどのように認証を強制しますか?
- 29. typescriptの既存の型にどのようにプロパティを追加しますか?
- 30. 空の文字列を許可しないようにSQL Serverテーブルに制約を設定できますか?
これは正しいですが、そのコードは厳密なヌルチェックでコンパイルエラーをスローします。「タイプ未定義はタイプ文字列に割り当てられません」これは型チェッカーをバイパスしません。 –