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
类型表示总是抛出错误的函数或包含无限循环的函数的返回类型。