TypeScript将使用 never 类型来表示不应该存在的状态(很抽象是不是)
// 返回never的函数必须存在无法达到的终点
// 因为必定抛出异常,所以error将不会有返回值
function error(message: string): never {
throw new Error(message);
}
// 因为存在死循环,所以loop将不会有返回值
function loop(): never {
while (true) {
}
}
never 与 void 的差异
差异1:void类型只是没有返回值本身没错, never只会抛出异常没有返回值
// void类型只是没有返回值,但本身不会出错
function Void(): void {
console.log();
}
// 只会抛出异常没有返回值
function Never(): never {
throw new Error('aaa');
}
差异2: never处于最底层,在联合类型中会被直接移除
type A = void | number | never
never 类型的一个应用场景
type A = '12' | '23' | '34'
function isHe(value: A) {
switch(value) {
case '12':
break
case '23':
break
case '34':
break
default:
// 用于场景兜底
const error: never = value;
return error
}
}