never
Never
プログラミング言語の設計には、bottom型の概念があります。それは、データフロー解析を行うと現れるものです。TypeScriptはデータフロー解析(😎)を実行するので、決して起こりえないようなものを確実に表現する必要があります。
never
型は、このbottom型を表すためにTypeScriptで使用されます。自然発生するケース:
絶対にreturnされない関数(例えば、関数本体に
while(true){}
がある場合)常にthrowする関数(例えば
function foo(){throw new Error('Not Implemented')}
の場合、foo
の戻り値の型はnever
です)
もちろん、このアノテーションを自分でも使用できます
しかし、neverは、neverだけを代入することができます。例:
すばらしい。さあ、主な使用例を見てみましょう:)
ユースケース: 網羅チェック(Exhaustive Checks)
たどり着けないコンテキストで関数を呼び出すことはできません。
never
は他のnever
にのみ割り当てられるので、コンパイル時の網羅チェックのためにも使うことができます。これはユニオン判別のセクションで説明します。
void
との混同
void
との混同関数が正常に終了することがないとき、never
が返されると知ると、直感的にvoid
と同じように考えたくなるでしょう。しかし、void
は部品です。never
はうそつきです。
何も返さない関数はvoid
を返します。しかし、returnを返すことのない関数(または常にスローする)はnever
を返します。void
は(strictNullCheckingなしで)代入することができるものですが、never
はnever
以外のものに代入することはできません。
最終更新