user!.name の「!」は何をしていますか。
値が null でも undefined でもないと断言して、型からそれらを外します。実行時には何もしないので、本当に null なら落ちます。確かめられるなら if や ?. を使います。
面接官が見ているのは非 null アサーションの危険を知っているか。
よくある答えと、面談でどう見られるか
- user が null や undefined ではないと断言して、検査を外している
その通りです。実行時には何もしないので、本当に null なら落ちます。 - user が null なら undefined を返す
それは ?.(オプショナルチェーン)です。! は何も確かめません。 - user が null なら例外を投げる
何も投げません。! は実行時のコードに残らないので、そのまま null.name を読んで落ちます。 - user の型を any にする
any にはしません。型から null と undefined を外すだけです。
模範解答
非 null アサーションです。「この値は null でも undefined でもない」と TypeScript に断言し、型から null と undefined を取り除きます。
as と同じで、実行時には何もしません。本当に null だったら、そのまま落ちます。
確かめられるなら、if (user) で絞り込むか、user?.name のように書く方が安全です。! を書くのは「直前で必ず値が入っていることが分かっているのに、TypeScript が追い切れない」ときに限ります。コードレビューで ! が多いと、null の扱いを考えていないと見られます。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。