never 通常表示一个不可能发生的值或一个永远不会返回的函数。never 类型通常与异常、无限循环或其他类似情况相关。
以下是一些常见的情况,never 类型可能会被用到:
-
抛出异常:
function throwError(message: string): never { throw new Error(message); }这里的
never表示该函数永远不会正常返回,而是抛出一个异常。 -
无限循环:
function infiniteLoop(): never { while (true) { // 无限循环,永远不会结束 } }类似地,由于循环永远不会结束,该函数的返回类型是
never。 -
类型保护: 在某些条件下,你可能能够使用类型保护,以便 TypeScript 知道某些值的类型是
never。function assertNever(value: never): never { throw new Error(`Unexpected value: ${value}`); } function processValue(value: string | number) { if (typeof value === 'string') { // 在这个分支中,value 的类型被收窄为 string } else if (typeof value === 'number') { // 在这个分支中,value 的类型被收窄为 number } else { // 这里的 value 应该是 never 类型 assertNever(value); } }在最后一个分支中,
assertNever函数用于告诉 TypeScript 编译器,此处的value应该是never类型。
总的来说,never 类型用于表示那些永远不会出现的值或函数的返回类型。这在某些情况下有助于更好地描述代码的行为,并让 TypeScript 编译器能够进行更严格的类型检查。