Dev Study
← 解説「never — 値が存在しない型」に戻る

サンプルコードで身につける: never — 値が存在しない型

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

1必ず throw する関数は never

never の最も基本の形です。必ず例外を投げる関数は「正常に値を返して戻ることが決してない」ので、戻り値の型が never になります。try / catch で受け止めて、値を返さずに抜けたことを確かめましょう。

TypeScript

2void と never の違い

void は「値を返さずに普通に終わって戻ってくる」、never は「決して戻ってこない」です。並べて動かすと、notify の次の行は実行されるのに abortProcess の後ろには進まない、という違いがはっきり分かります。

TypeScript

3never の関数を呼んだ先には進まない

戻り値が never の関数を呼ぶと、コンパイラは「この先には到達しない」と理解します。number を返すはずの関数の最後が failWith で終わっていても return 漏れと扱われないのは、その理解があるからです。エラー処理を1か所にまとめる実務パターンです。

TypeScript

4絞り込みの行き着く先は never

ユニオン型の可能性を絞り込みですべて消すと、残った型は never になります。「もうどの値でもあり得ない」状態を表すのが never だ、という見方ができる例で、次の網羅性チェックの土台になります。

TypeScript

5switch の網羅性チェック

判別可能ユニオンを switch で分岐し、default で never 型の変数に代入するのが網羅性チェックの定番です。将来ステータスの種類が増えて分岐が漏れると、default に never でない型が流れ込んでコンパイルエラーになり、修正漏れに必ず気づけます。

TypeScript