strictNullChecks を有効にしたら、エラーが数百件出ました。どう片付けますか。
1件ずつではなく、null が入ってくる入口から直します。null を返す関数が1つあるだけで、使う全箇所がエラーになります。入口で確かめて null でない値だけを流せば、まとめて消えます。
面接官が見ているのは機械的に ! で消さず、null の扱いを設計として直せるか。
これは「strict が無効のまま育ったプロジェクトで、strict を有効にしたい。どう進めますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- null になりうる値が入ってくる場所を特定し、そこで確かめるか、型から null を外せるよう設計を直す
その通りです。エラーの数より、null が入ってくる入口の数の方がずっと少ないことが多いです。 - 全部に ! を付けて消す
エラーは消えますが、null の検査を全部外しています。有効にした意味がありません。 - 全部に ?. を付けて落ちないようにする
落ちなくはなりますが、undefined のまま処理が進み、別の場所でおかしくなります。null の意味を考えます。 - 件数が多いので strictNullChecks はあきらめる
数百件のエラーは、null で落ちうる箇所がそれだけあるということです。だからこそ価値があります。
模範解答
エラーの1件ずつではなく、null が入ってくる入口から見ます。
数百件のエラーの多くは、少数の入口から null かもしれない値が流れてきた結果です。たとえば「ユーザーを探す関数が見つからなければ null を返す」が1つあるだけで、その戻り値を使う全箇所がエラーになります。
入口で null を確かめて、その先には null でない値だけを渡すようにすれば、下流のエラーはまとめて消えます。見つからないのが異常なら、その場で例外にする、という設計の判断になります。
! や ?. を機械的に付けると、エラーは消えても null の扱いを考えたことになりません。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。