跳到主要内容

TypeScript never 类型

摘要:在本教程中,你将了解不包含任何值的 TypeScript never 类型。

TypeScript never 类型简介

never 类型是不包含任何值的类型。 因此,不能为 never 类型的变量分配任何值。

通常情况下,你使用 never 类型来表示始终抛出错误的函数的返回类型。 例如:

function raiseError(message: string): never {
throw new Error(message);
}

以下函数的返回类型被推断为 never 类型:

function reject() { 
return raiseError('Rejected');
}

如果你有一个包含无尽循环的函数表达式,则其返回类型也是 never 类型。 例如:

let loop = function forever() {
while (true) {
console.log('Hello');
}
}

在这个例子中,forever() 函数的返回类型是 never

如果你发现一个函数的返回类型是 never,那么应该确保这不是你想要执行的操作。

当你通过永远不可能为 true 的类型保护来缩小变量的类型时,变量也可以获得 never 类型。

例如,如果没有 never 类型,以下函数会导致错误,因为并非所有逻辑分支都有返回值。

function fn(a: string | number): boolean {
if (typeof a === "string") {
return true;
} else if (typeof a === "number") {
return false;
}
}

为了使代码有效,你可以返回一个返回类型为 never 类型的函数。

function fn(a: string | number): boolean {
if (typeof a === "string") {
return true;
} else if (typeof a === "number") {
return false;
}
// make the function valid
return neverOccur();
}

let neverOccur = () => {
throw new Error('Never!');
}

概括

  • never 类型不包含任何值。
  • never 类型表示总是抛出错误的函数或包含无限循环的函数的返回类型。