never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
// 因为存在死循环,所以 loop 将不会有返回值
function infiniteLoop(): never {
while (true) {
}
}
never与void的差异
// void类型只是没有返回值,本身不会出错
function f(): void {
console.log('void');
}
// 只会抛出异常,不会有返回值
function error(message: string): never {
throw new Error(message);
}
当鼠标移到A上,会发现A只有void | number类型,never在联合类型中会被移除
type A = void | number | never