Typescript中的never类型

发布时间 2023-12-25 10:51:28作者: 脆皮鸡

在 TypeScript 中,never 类型表示那些永远不会发生的类型。它通常用来表示以下情况:

  1. 函数的返回类型:如果一个函数永远不会返回(例如抛出异常或进入无限循环),可以将其返回类型标注为 never
function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // 无限循环
  }
}
  1. switch 语句的 exhaustive 检查:当针对某个可枚举类型的变量进行 switch 语句时,使用 never 类型可以确保所有可能的情况都被覆盖,避免遗漏情况。
type Color = "Red" | "Green" | "Blue";

function getColorValue(color: Color): number {
  switch (color) {
    case "Red":
      return 1;
    case "Green":
      return 2;
    case "Blue":
      return 3;
    default:
      const exhaustiveCheck: never = color; // 当所有情况都已处理时,这里的值不会被赋值到
      throw new Error(`Unhandled color: ${exhaustiveCheck}`);
  }
}

never 类型是一种特殊的底层类型,它是所有其他类型的子类型,但没有任何类型是 never 的子类型或可以赋值给 never 类型。因此,当 TypeScript 推断出某个表达式的类型为 never 时,通常表示出现了类型错误或不可到达的代码路径