初級 › 非nullアサーション(!)がコンパイラを騙して実行時エラーになる › パターン2
非nullアサーション(!)がコンパイラを騙して実行時エラーになる
変数名の後ろに!を付ける非nullアサーションは、「この値はnull/undefinedではない」とコンパイラに約束する構文です。
1 interface User { 2 name: string; 3 } 4 function findUser(id: number): User | undefined { 5 if (id === 1) return { name: "Al" }; 6 return undefined; 7 } 8 const u = findUser(_); ^ 9 console.log(u!.name.toUpperCase());
main.ts:9
TypeError: Cannot read properties of undefined (reading 'toUpperCase')
空欄を埋めてコンパイルを通す
id=2ではfindUserがundefinedを返します。u!はコンパイラの検査を止めるだけなので、実行時にはundefinedのままnameへアクセスして例外になります。
次の問題