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