strictNullChecks
デフォルトでは、nullとundefinedはTypeScriptのすべての型に代入できます。
let foo: number = 123;
foo = null; // Okay
foo = undefined; // Okayこれは、多くの人々がどのようにJavaScriptを書くかをモデルにしています。しかし、すべてのものと同様に、TypeScriptでは、nullかundefinedを代入できるか、できないかを明示することができます。
厳密なnullチェックモードでは、nullとundefinedは異なります:
let foo = undefined;
foo = null; // NOT OkayMemberインターフェースを持っているとしましょう:
interface Member {
name: string,
age?: number
}すべてのMemberが彼らの年齢を提供するわけではないので、ageはオプションのプロパティです。 ageの値はundefinedかもしれません。
undefinedはすべての悪の根です。ランタイムエラーが発生することがよくあります。実行時にErrorをスローするコードを書くのは簡単です:
getMember()
.then(member: Member => {
const stringifyAge = member.age.toString() // Cannot read property 'toString' of undefined
})しかし、厳密なnullチェックモードでは、このエラーはコンパイル時に捕捉されます。
非nullアサーション演算子(Non-Null Assertion Operator)
新しい!ポストフィックス式演算子を使用して、型チェッカーが結論付けられないコンテキストにおいて、そのオペランドが非nullでかつ非undefinedであることをアサートすることができます。例えば:
これは単なるアサーションであり、型アサーションと同じように、あなたは値がnullでないことを確認する責任があることに注意してください。非nullアサーションは、本質的にはコンパイラに"それはnullでないことが分かっているから、nullではないものとして使います"と伝えるものです。
明確な割り当てアサーション演算子(Definite Assignment Assertion Operator)
TypeScriptは、初期化されていないクラスのプロパティについてもエラーを出します。
プロパティ名の末尾に明確な割り当てアサーションを使用することで、コンストラクタ以外の場所で初期化していることをTypeScriptに伝えることができます。
単純な変数宣言でこのアサーションを使用することもできます(例:
すべてのアサーションと同様に、コンパイラにあなたを信頼するように指示しています。コンパイラは、コードが実際にプロパティを常に割り当てていなくても、エラーを出すことはありません。
最終更新
役に立ちましたか?