でも、nullやundefinedでもプログラムが中断できたり(Node.jsのprocess.exit, 例外等)、無限ループできる、となると、ボトム型というのは誤りなんじゃないかなぁ、と思うのだけど。それだけを示す型がnever型であり、これこそがボトム型であるはず。この説明は誤りである気がする

typescript-jp.gitbook.io/deep-

フォロー

nullやundefinedは戻り値として返されるのに対し、neverは戻り値を返したらアウトですからね

おそらく、部分型関係は、こうなっていると思われる

never <: undefined <: null <: number, string, boolean, ...

いや、undefinedにもnullは(strictNullChecksをつけなければ)エラーにはならないから、これも間違えてるな。それ考えたら、 の部分型関係、ちょっとめちゃくちゃだな・・・まぁ、 自体がめちゃくちゃすぎるから、全然マシなんだけど

少なくとも、nullやundefinedは部分型としてneverがあるから、ボトム型ではないということは間違いない。never型を除くすべての型の部分型ではあるけど

null <: undefinedだし、undefined <: nullっていうちょっと不思議な部分型関係で(しかしnull = undefinedではない)、そのためにnullかundefined、どちらかの上位型であれば、その部分型がnull, undefinedになるってことかな

厳密には、nullとundefined双方にnullとundefinedの性質を持たせている、といったところだろうが(これであれば、never <: null, undefined <: ...となるし、null ≠ undefinedの説明もつく)

あ、そうか。 って構造的部分型を採用しているから、null <: undefinedであり、undefined <: nullっていうのは正しいのか

だから実質的にnull = undefinedと言えるのでは?と言うと、ほかの人が混乱を引き起こしそうなので、これ以上は深堀りせずに、とりあえず、null ≠ undefinedってことにしとこう。TSのnullの話終わり

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。