never 型

neverは、 TypeScript で「あるはずない」を表現するための型です。

正常に return されない可能性のある関数で使う

これは例えば、

  1. エラーでthrowされる
  2. process.exitで途中で処理を途中で中断する

などの時neverが当てはまります。

const fn: () => never = () => {
  throw new Error('...');
  // process.exit(1)
}

ただDefinitelyTyped/DefinitelyTypedで型ファイルを追加しようとした時に、never型を使っていたら「neverいらないから削除して」と言われたのでvoidと同じで基本省略する形で統一すればいいかもしれません。

Conditional Types でありえない状態の戻り型に指定

Conditional Types で型を変換する時にstringnumberしか期待しないのにFooという良くわからないものが来てしまった時に、想定外なのでneverに設定するということが良くあると思います。

type StringOrNumber<T> =
  T extends string
    ? string
    : T extends number
    ? number
    : never