Skip to content

unknown、any 与 never:顶层类型和底层类型的分工

主题定位

这三个类型分别代表放弃检查、延迟确认和不可能到达,含义完全不同。

  • 这三个类型分别代表放弃检查、延迟确认和不可能到达,含义完全不同
  • any、unknown、never 经常被一起问,但它们位于类型系统的不同位置
  • 理解它们要从类型安全与控制流推断两个维度看
  • 把接口返回值先写成 any 往往会让错误一路扩散到业务层

unknown、any、never 各自解决什么问题

unknown

unknown 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 unknown 的差异最终会体现在 类型表达、缩窄推导、工程约束 这几个维度。 unknown 讲清适用边界、失效条件和代价结构,结论才有技术含量。

any

any 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 any 的差异最终会体现在 类型表达、缩窄推导、工程约束 这几个维度。 any 讲清适用边界、失效条件和代价结构,结论才有技术含量。

never

never 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 never 的差异最终会体现在 类型表达、缩窄推导、工程约束 这几个维度。 never 讲清适用边界、失效条件和代价结构,结论才有技术含量。

三者的关系与边界

  • 这三个类型分别代表放弃检查、延迟确认和不可能到达,含义完全不同
  • any、unknown、never 经常被一起问,但它们位于类型系统的不同位置
  • 理解它们要从类型安全与控制流推断两个维度看
  • 把接口返回值先写成 any 往往会让错误一路扩散到业务层
  • any 会关闭大部分类型检查,并在赋值与访问上产生传染性
  • unknown 表示值存在但尚未确认类型,使用前必须缩窄或断言

类型约束建议

  • 这三个类型分别代表放弃检查、延迟确认和不可能到达,含义完全不同
  • any、unknown、never 经常被一起问,但它们位于类型系统的不同位置
  • 理解它们要从类型安全与控制流推断两个维度看
  • 把接口返回值先写成 any 往往会让错误一路扩散到业务层
  • any 会关闭大部分类型检查,并在赋值与访问上产生传染性

问答设计及延伸

标准回答

回答 unknown、any 与 never:顶层类型和底层类型的分工 时,先定义 unknown、any、never 各自解决的问题,再比较它们在 类型表达、缩窄推导、工程约束 上的差异,最后给出选型边界和工程代价。

追问拆解

  • unknown、any 与 never:顶层类型和底层类型的分工 与“类型守卫:控制流分析如何把宽类型缩窄”的边界关系
  • unknown、any 与 never:顶层类型和底层类型的分工 与“interface 与 type:开放扩展、组合表达与工具类型兼容”的边界关系
  • 跨标签页、跨域、多端协作场景下的结论变化
  • 维护成本上升后的优先级调整

容易失分的点

  • 只给“哪个好”的结论,不先拆对象
  • 只报 API 或术语,不解释运行时行为和代价
  • 缺少真实场景,导致结论过度绝对

项目映射

  • 结合真实系统说明 unknown 到 never 分别落在哪段链路
  • 补充未选方案的放弃原因和约束差异
  • 补充线上问题、治理动作和验证结果

相关主题