でも、nullやundefinedでもプログラムが中断できたり(Node.jsのprocess.exit, 例外等)、無限ループできる、となると、ボトム型というのは誤りなんじゃないかなぁ、と思うのだけど。それだけを示す型がnever型であり、これこそがボトム型であるはず。この説明は誤りである気がする #fedibird
https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined
nullやundefinedは戻り値として返されるのに対し、neverは戻り値を返したらアウトですからね #fedibird
おそらく、部分型関係は、こうなっていると思われる #fedibird
never <: undefined <: null <: number, string, boolean, ...
いや、undefinedにもnullは(strictNullChecksをつけなければ)エラーにはならないから、これも間違えてるな。それ考えたら、 #TypeScript の部分型関係、ちょっとめちゃくちゃだな・・・まぁ、 #JavaScript 自体がめちゃくちゃすぎるから、全然マシなんだけど #fedibird
少なくとも、nullやundefinedは部分型としてneverがあるから、ボトム型ではないということは間違いない。never型を除くすべての型の部分型ではあるけど #fedibird
null <: undefinedだし、undefined <: nullっていうちょっと不思議な部分型関係で(しかしnull = undefinedではない)、そのためにnullかundefined、どちらかの上位型であれば、その部分型がnull, undefinedになるってことかな #fedibird
厳密には、nullとundefined双方にnullとundefinedの性質を持たせている、といったところだろうが(これであれば、never <: null, undefined <: ...となるし、null ≠ undefinedの説明もつく) #fedibird