--> Typescriptにおけるvoid型とnever型 | BORDERLESSS
scroll

Typescriptにおけるvoid型とnever型

nullやundefinedを調べているうちに気になる記述を見つけました。

//戻り値がない関数の戻り値を取得したときもundefinedになります。

function func() {}
console.log(func());// =>undefined

戻り値がないときに使う型といえばvoidという印象があるので、どう使い分けるのか調べてみました。

戻り値のためのreturnがあるか?

まず、undefinedの場合はretuenがないとコンパイルエラーになります。

C言語同様、そもそも返り値がない想定なのがvoidです。

https://typescriptbook.jp/reference/functions/void-type

戻り値がない関数とvoid型 (void type) -サバイバルTypeScript

戻り値がないってどんな状況?

まず言えるのが、returnが必要ない例。(そりゃそうだ)

例えばconsole.logで表示させるだけとか、確実にundefinedでしか戻ってこない場合はvoidを検討するのもいいかもしれません。

他に思いついたのがエラーを起こしたとき。

でも調べてみると、「voidは呼び元には戻ってくるけど、返り値がない」とのこと。

エラーの場合は「そもそも呼び出し元に戻ってこない」ことが多いと思うので、また違うんだろうと思います。この場合に使うとしたら、never型かもしれません。

never型 is 何

never型は文字通り、「恒久的にない」場合に使われるそう。

voidが「値がない正常終了」に対して、neverが「正常終了を想定していない」場合に使用されます。

戻り値がvoid型のメソッドは『正常終了時になにも値を返さないメソッド』と言い換えられます。
一方、戻り値がnever型のメソッドは『正常終了しないのでなにも返ってこないメソッド』と言い換えられます。

https://nishinatoshiharu.com/diffrence-void-never/