IT-Q

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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。