never
は、 TypeScript で「あるはずない」を表現するための型です。
正常に return されない可能性のある関数で使う
これは例えば、
エラーで
throw
されるprocess.exit
で途中で処理を途中で中断する
などの時never
が当てはまります。
const fn: () => never = () => {
throw new Error('...');
// process.exit(1)
}
ただDefinitelyTyped/DefinitelyTypedで型ファイルを追加しようとした時に、never
型を使っていたら「never
いらないから削除して」と言われたのでvoid
と同じで基本省略する形で統一すればいいかもしれません。
Conditional Types でありえない状態の戻り型に指定
Conditional Types で型を変換する時にstring
かnumber
しか期待しないのにFoo
という良くわからないものが来てしまった時に、想定外なのでnever
に設定するということが良くあると思います。
type StringOrNumber =
T extends string
? string
: T extends number
? number
: never