Dev Study
TypeScript コース

36. 網羅性チェック — neverで分岐の抜け漏れを防ぐ

リテラル型のユニオンを switch で分岐するとき、default で値を never 型の変数に代入しておくと、分岐の抜け漏れを検出できます。すべての候補を case で処理していれば default に届く値は存在しないはずなので、never への代入が成立する、という理屈です。

この定石が効くのは「候補が後から増えたとき」です。たとえば信号の色に新しい候補を1つ追加すると、case が足りない switch すべてで never への代入がコンパイルエラーになり、直すべき場所をコンパイラが漏れなく列挙してくれます。

つまずきポイントは、default を書かなかったり、default で何もしなかったりするとチェックが働かないことです。「全部の候補を処理した」を型で証明するのがこの書き方の目的なので、ユニオンの switch には習慣として never への代入を入れておきましょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

TypeScript
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗