
TypeScript 的类型系统强大到几乎是一门独立的编程语言。条件类型、映射类型、模板字面量类型……这些工具让我们能在编译期捕获大量错误。
类型体操的诱惑
当你发现可以用类型系统解决一个复杂问题时,那种成就感是无与伦比的。一个精妙的类型定义可以替代数十行运行时代码。
但这里有一个陷阱:类型代码也是代码,也需要被维护。
实际的经验教训
在一个大型项目中,我曾经写过一个超过 200 行的条件类型链。它在技术上完美地工作了,但三个月后,没有人能理解它——包括我自己。
从那次经历中,我总结了几条原则:
类型复杂度应该与业务复杂度成正比。简单的业务逻辑不需要复杂的类型定义。
优先使用具名类型。interface 和 type alias 比内联的复杂类型更容易理解和调试。
设置明确的边界。在工具函数和核心模块中使用高级类型是合理的,但在业务组件中应该保持简单。
找到平衡
类型系统的目标是帮助开发者,而不是制造障碍。当类型定义本身成为理解代码的障碍时,我们就走得太远了。
好的类型设计应该是:在不增加认知负担的前提下,提供恰到好处的类型安全。
