IT-Q

never 型は、どういう値の型ですか。

決して存在しない値の型です。必ず例外を投げる関数の戻り値や、絞り込みで可能性が残っていない分岐に現れます。void は「終わるが値を返さない」で、別物です。

面接官が見ているのはnever を「何も無い」ではなく「起こりえない」と理解しているか。

よくある答えと、面談でどう見られるか

  • 決して存在しない値の型。必ず例外を投げる関数の戻り値や、絞り込みで残りが無くなったときに現れる
    その通りです。網羅性チェックに使えるのはこの性質のためです。
  • undefined と同じ
    違います。undefined は値が存在しますが、never 型の値は存在しません。
  • 戻り値が無い関数の型(void と同じ)
    近いですが違います。void は「終わって何も返さない」、never は「そもそも終わらない(例外か無限ループ)」です。
  • any の反対で、型の検査を強くするための型
    そういう役割ではありません。値が存在しえないことを表す型です。

模範解答

決して存在しない値の型です。必ず例外を投げる関数や、終わらない関数の戻り値は never になります。

絞り込みの最後にも現れます。string | number を typeof で string と number に分けたあと、残りの分岐では x は never になります。可能性が残っていないからです。

これを使うと網羅性チェックが書けます。switch の default で、絞り込まれた値を never 型の変数に代入しておくと、ユニオンに新しいメンバーを足したときに、処理を書き忘れた箇所がコンパイルエラーになります。

void とは別物です。void は「終わるが、意味のある値を返さない」、never は「そもそも普通に終わらない」です。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。