1! の基本 — null の可能性を打ち消す
値の後ろに ! を付けると、string | null から null が取り除かれて string として扱えます。「この呼び出しでは必ず値がある」と流れの上で分かっているときに、コンパイラへその保証を伝える最も基本の形です。
TypeScript
2配列の find の結果に ! を付ける
find は「見つからないかもしれない」ので undefined を含む型を返します。候補に必ず含まれていると分かっている検索では、! を付けて結果をそのまま使うのが典型的な使いどころです。
TypeScript
3正規表現の match 結果に ! を付ける
文字列の match メソッドも「一致しないかもしれない」ので null を含む型を返します。形式が保証されたデータから日付などを抜き出す場面では、必ず一致すると分かっているため ! が活躍します。
TypeScript
4if での絞り込みと ! の使い分け
同じ「null かもしれない値」でも、if で絞り込めば保証はコンパイラ持ち、! を使えば保証は自分持ちになります。迷ったら安全な絞り込みを選び、! は流れの上で確実なときの最後の手段にする、という使い分けを見比べる例です。
TypeScript
5ログイン中ユーザーの取得 — 前提が確かな場面の !
「ログイン中ユーザーの ID は必ず一覧に存在する」のようなアプリの前提があるのに、コンパイラはそれを追えない、というのが実務で ! を使う典型場面です。前提をコメントで残しておくと、後から読む人にも保証の根拠が伝わります。
TypeScript