Null 許容型 ('strictNull')
CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 71/73。
デフォルトでは、TypeScriptは null と undefined を任意の型に代入することを許可しており、これは実行時エラーにつながる可能性があります。strictNullChecks コンパイラオプションは、null と undefined をそれぞれ独自の型にすることで、この動作を変更します。
strictNullChecks が有効な場合、これらの値を許可するには、型アノテーションに null または undefined を明示的に含める必要があります。
// strictNullChecks なしの場合 - これは許可されます
let name: string = null; // strictNullChecks が有効だとエラーになります!
// strictNullChecks ありの場合 - 明示的である必要があります
let name: string | null = null; // これで動作しますこれにより、潜在的な null 値を使用する前に処理することが強制されます。事前にチェックを行わない限り、null である可能性がある値に対してメソッドを呼び出したりプロパティにアクセスしたりすることはできません:
function processName(name: string | null) {
// これはエラーを引き起こします
// console.log(name.toUpperCase());
// 最初にチェックする必要があります
if (name !== null) {
console.log(name.toUpperCase()); // 安全に使用できます
}
}このコンパイラオプションは、一般的な「Cannot read property of null」ランタイムエラーをコンパイル時にキャッチすることで、それらを防ぐのに役立ち、コードの信頼性と予測可能性を高めます。
チャレンジ
簡単null 値が含まれる可能性のあるユーザープロファイルデータを安全に処理する関数を作成します。このチャレンジでは、strictNullChecks によって、Null 許容型を明示的に処理する方法を学びます。
以下の仕様で getUserDisplayName という名前の関数を作成してください:
string | null型のパラメータfullNameを受け取るnullでない場合は、そのフルネームを返す- フルネームが
nullの場合は、"Anonymous User"を返す - 戻り値の型を明示的に
stringとする
次に、以下の仕様で formatUserEmail という名前の関数を作成してください:
string | null型のパラメータemailを受け取るnullでない場合は、メールアドレスを小文字にして返す- メールアドレスが
nullの場合は、"No email provided"を返す - 戻り値の型を明示的に
stringとする
さらに、以下の仕様で getUserInfo という名前の関数を作成してください:
string | null型のnameと、string | null型のemailの2つのパラメータを受け取る- 作成した2つの関数を使用してパラメータを処理する
"Name: [processed name], Email: [processed email]"という形式の文字列を返す- 戻り値の型を明示的に
stringとする
以下のデータを使用して関数をテストしてください:
getUserDisplayName("John Smith")を呼び出し、結果を出力するgetUserDisplayName(null)を呼び出し、結果を出力するformatUserEmail("ALICE@EXAMPLE.COM")を呼び出し、結果を出力するformatUserEmail(null)を呼び出し、結果を出力するgetUserInfo("Bob Johnson", "bob@test.com")を呼び出し、結果を出力するgetUserInfo(null, null)を呼び出し、結果を出力するgetUserInfo("Sarah Wilson", null)を呼び出し、結果を出力する
自分で試してみよう
// TODO: ここにコードを記述してください
// fullName (string | null) を受け取り、string を返す getUserDisplayName 関数を作成します
// email (string | null) を受け取り、string を返す formatUserEmail 関数を作成します
// name と email (どちらも string | null) を受け取り、string を返す getUserInfo 関数を作成します
// 関数をテストし、結果を出力します
console.log(getUserDisplayName("John Smith"));
console.log(getUserDisplayName(null));
console.log(formatUserEmail("ALICE@EXAMPLE.COM"));
console.log(formatUserEmail(null));
console.log(getUserInfo("Bob Johnson", "bob@test.com"));
console.log(getUserInfo(null, null));
console.log(getUserInfo("Sarah Wilson", null));このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Introduction To TypeScriptのすべてのレッスン
2基本の型
基本の型: str, num, boolean'any' 型: 脱出ハッチ'unknown' 型'null' と 'undef' の扱い型推論の実践明示的な型アノテーションまとめ:基本の型の演習5型:エイリアス、ユニオン型、インターセクション型
プリミティブ型の型エイリアスユニオン型 ('|')ユニオン型の扱い方リテラル型インターセクション型 ('&')型エイリアスの組み合わせまとめ:高度な型の組み合わせ自分で練習してみよう: TypeScriptプレイグラウンド