
TypeScriptのnever型とは?初心者向けに解説します。
TypeScriptの日本語ドキュメントが分かりやすかったでの、こちらを参考に解説しますが、
never型が自然発生する状況
Neverという型が返されるとき、自然発生するケースは二種類あります。
一つ目は、完全に絶対にリターンされない関数が呼び出されたとき、
例えば無限ループなんかがその例です。
while(true){}
そして二つ目は、必ず絶対エラーを返す関数が呼び出された時です。
function foo(){throw new Error('Not Implemented')}
こういう関数が出現したときは、関数の戻り値はneverが返ってきます。
neverアノテーションは自分で使うことも可能
もちろん、このアノテーションを自分でも使用できます
let foo: never; // Okay
しかし、neverは、neverだけを代入することができますので、普通の値は入りません。
let foo: never = 123; // Error: Type number is not assignable to never
// Okay as the function's return type is `never`
let bar: never = (() => { throw new Error(`Throw my hands in the air like I just don't care`) })();
上記の例では、エラーを発生するとNeverが返ってくるので、代入可能です。
voidとneverは違う
そもそも、何も返さない関数がvoidであるので、
returnを返すことのない関数(または常にスローする)は、neverを返すので、
これらは別物です。
また、voidは代入することが出来ますが、
neverはnever以外のものに代入することはできません。
これも、この二つの違いです。