でも、nullやundefinedでもプログラムが中断できたり(Node.jsのprocess.exit, 例外等)、無限ループできる、となると、ボトム型というのは誤りなんじゃないかなぁ、と思うのだけど。それだけを示す型がnever型であり、これこそがボトム型であるはず。この説明は誤りである気がする #fedibird
https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined
おそらく、部分型関係は、こうなっていると思われる #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
あ、そうか。 #TypeScript って構造的部分型を採用しているから、null <: undefinedであり、undefined <: nullっていうのは正しいのか #fedibird
だから実質的にnull = undefinedと言えるのでは?と言うと、ほかの人が混乱を引き起こしそうなので、これ以上は深堀りせずに、とりあえず、null ≠ undefinedってことにしとこう。TSのnullの話終わり #fedibird
nullやundefinedは戻り値として返されるのに対し、neverは戻り値を返したらアウトですからね #fedibird