该never
类型在打字稿中很少使用,仅当函数永远不会到达return statement时才使用。
发生这种情况主要有两个原因:
- 该函数抛出错误
- 函数无限循环
让我们看一个最常见用例的例子——函数抛出一个错误,因此它永远不会到达返回语句:
function throwError(message: string): never { throw new Error(message); }
不要与void
类型混淆:
function logger(message: string): void { console.log(message); }
不同之处在于,void 用于不返回任何内容的函数,从技术上讲它可以返回null
or undefined
。如果我们不小心从返回的函数中返回了一些东西,void
我们会收到一条错误消息。
然而,对于never
类型,函数永远不会返回任何东西,所以我们用它注释never
说我们永远不会到达这个函数的结尾。我们永远不会完全执行该功能。
我们很少有函数应该never
作为返回值键入。例如,如果我们只在某些时候抛出错误,我们不应该用 never 注释函数:
function sometimesThrowError(message: string): number { if (!message) { throw new Error(message); } return 42; }
在上面的场景中,我们仍然应该将函数注释为返回 a
number
而不是never
,因为存在函数到达它的结尾并返回的场景。
我们只在函数never
结束时用类型 never 注释一个函数。如果它只可能抛出一个错误,我们就不会用never
.