Skip to content

类型守卫:控制流分析如何把宽类型缩窄

主题边界

  • 类型守卫的目标是在分支内部把联合类型缩窄为更具体的成员。
  • 讨论它时要把编译器视角与运行时事实分开。

机制与流程

  • typeofinstanceofin、字面量判别字段和用户自定义谓词函数都会参与控制流分析。
  • 当条件分支排除某些可能性后,编译器在该路径上收窄变量类型,这就是 narrowing。
  • 判别联合最稳定的做法是设计一个不可歧义的 discriminant 字段,而不是依赖脆弱的存在性判断。

关键差异

  • 守卫是在使用点缩窄,断言是直接告诉编译器“相信我”;两者安全级别不同。
  • 运行时校验库如 zod/io-ts 与 TS 守卫常一起使用,前者给出真实验证,后者承接静态类型信息。

边界条件

  • 错误的自定义类型谓词会让类型系统产生虚假的安全感。
  • 跨网络、存储、URL 参数等边界数据不能只靠静态缩窄,必须有真实运行时验证。

工程落点

  • 接口层和状态机代码非常依赖判别联合与守卫来避免分支爆炸。
  • 良好的守卫设计能减少 as 断言滥用,并让错误更早暴露在编译期。

相关主题