glownight

返回

最短理解:

  • any:放弃类型检查(“我不管了”)
  • unknown:暂时不知道类型,但必须先判断再用(“先验明身份”)
  • never:不可能有值(“走不到这里”)

  1. any
  • 含义:可赋给任何类型,也可接收任何类型;基本跳过 TS 保护。
  • 场景:迁移旧代码、临时兜底、第三方无类型声明时短期过渡。
  • 风险:错误容易溜进运行时。
  1. unknown
  • 含义:类型安全版“未知值”;不能直接调用属性/方法,必须先缩小类型。
  • 场景:接口返回不可信数据、catch (e)、解析外部输入(JSON/表单/消息)。
  • 优点:强制你做类型守卫,更安全。
  1. never
  • 含义:永远不会出现的值类型。
  • 场景:
    • 永不返回的函数(throw / 死循环)
    • switch 穷尽检查(确保联合类型每种分支都处理了)
    • 条件类型中表示“被过滤掉的分支”

典型示例(never 做穷尽检查):

type Shape = { kind: 'circle'; r: number } | { kind: 'square'; s: number };

function area(shape: Shape) {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.r ** 2;
    case 'square': return shape.s ** 2;
    default: {
      const _exhaustive: never = shape; // 新增 kind 未处理会在这里报错
      return _exhaustive;
    }
  }
}
ts

实践建议:

  • 默认优先 unknown,少用 any
  • any 用在边界层并尽快收口。
  • 对联合类型养成 never 穷尽检查习惯。
TypeScript 里 any / unknown / never 的区别和典型使用场景?
作者 glownight
发布于 2025年4月9日