void型とnerver型の違い、の結論
void型は『なにも返さない』を表現する型、never型は『けっして起こりえないこと』を表現する型。
メソッドの戻り値においてvoid型は『正常終了時になにも値を返さないメソッド』を表現するのに対し、never型は『正常終了しないのでなにも返ってこないメソッド』を表現する。
void型について
void型とは『なにも返さない』を表現する型です。
値を返さないメソッドの戻り値の型として主に利用されます。
void型の具体例
void型の具体例について紹介します。
returnがないメソッドの戻り値
const hello = () => {
console.log('hello')
}
// const hello: () => void
returnでなにも値を返さないメソッドの戻り値
const hello = () => {
console.log('hello')
return
}
// const hello: () => void
undefinedを返すメソッドの戻り値
void型にはundefinedが含まれているため、undefinedを返すメソッドの戻り値はvoid型といえます。
const hello = (): void => {
console.log('hello')
return undefined
}
// const hello: () => void
never型について
never型とは『けっして起こりえないこと』を表現する型です。
決して発生しない事象に対してnever型が付与されるので、never型にはどんな値もセットできません。
never型は、どんな値でもセットできるany型やunknown型とは逆の挙動になります。
never型の具体例
never型の具体例について紹介します。
絶対に実行されないブロック内の変数
never型は『けっして起こりえないこと』を表現する型であるため、絶対に実行されないブロック内の変数はnever型になります。
const foo = true;
if (foo) {
foo; // const foo: true
} else {
foo; // const foo: never
}
無限ループのメソッドの戻り値
戻り値がvoid型のメソッドは『正常終了時になにも値を返さないメソッド』と言い換えられます。
一方、戻り値がnever型のメソッドは『正常終了しないのでなにも返ってこないメソッド』と言い換えられます。
例えば無限ループのメソッドはいつになってもなにも返ってこない(正常終了しない)ため、never型のメソッドとなります。
const infiniteHello = () => {
while (true) {
console.log('Hello, world!');
}
}
// const infiniteHello: () => never
例外を投げるだけのメソッドの戻り値
常に例外を投げるメソッドは正常終了という概念がないため戻り値はnever型になります。
const panic = (message: string) => {
throw new Error(message)
}
// const panic: (message: string) => never
さいごに
TypeScriptにおけるnever型の具体的な利用例の詳細解説はTypeScriptでのnever型の利用例(網羅性チェックとUnion型のフィルタリング)で紹介しています。
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!