类型检查器是 TypeScript 静态类型系统的核心。它对解析后的源代码执行类型分析,以验证类型的正确性,并为 TypeScript 强大的开发时错误检测和编辑器工具奠定基础。
本页介绍了类型检查器组件的内部架构和工作原理,该组件负责验证您的代码是否正确遵循 TypeScript 的类型系统规则。有关特定类型系统功能的更多信息,请参阅 类型系统。
类型检查器通过验证代码是否遵循语言的类型规则,弥合了 TypeScript 语法与语义之间的鸿沟。它负责:
来源: src/compiler/checker.ts1-1219 src/compiler/program.ts401-480
类型检查器被实现为一个通过 `createTypeChecker` 工厂函数公开的类。它维护类型系统状态,包括缓存类型信息以提高性能。
类型检查器与其他组件进行了大量交互
来源: src/compiler/checker.ts1153-1210 src/services/services.ts1079-1090
类型检查器维护一个类型缓存,以避免冗余计算。类型一旦创建,便会在整个代码库中重用,从而提高性能,尤其是在大型项目中。
类型缓存对于映射类型和条件类型等复杂类型尤为重要,否则这些类型将需要重复计算。
来源: src/compiler/checker.ts1158-1220 src/compiler/checker.ts3000-3100
类型检查器遍历 AST,检查表达式、语句和声明是否存在类型错误。这发生在多个阶段:
来源: src/compiler/checker.ts5000-5500 src/compiler/checker.ts25000-25200
TypeScript 将类型表示为具有区分联合模式的对象。基础的 Type 接口包含通用属性,而特定的变体如 ObjectType、UnionType 等则添加了自己的属性。
类型使用 TypeFlags 的位字段进行分类,该字段可以高效地编码类型的属性。这允许对类型特征进行快速测试。
可以通过这些标志来测试类型,以确定它们的性质
来源: src/compiler/types.ts1082-1109 src/compiler/checker.ts1214-1250
TypeScript 类型系统具有丰富的类型层级结构
来源: src/compiler/types.ts1020-1140 src/compiler/checker.ts1200-1400
TypeScript 中的类型兼容性基于结构化子类型。类型检查器提供多种关系来比较类型:
核心的可赋值性检查函数实现了这些关系检查,是类型检查操作的中心。
来源: src/compiler/checker.ts22000-23000 src/compiler/checker.ts30000-31000
类型推断是类型检查器驱动的关键功能,它允许 TypeScript 在没有显式注解的情况下确定类型。这包括:
类型推断使用双向分析,同时考虑使用位置的预期类型和表达式的实际类型。
来源: src/compiler/checker.ts35000-36000 src/compiler/checker.ts40000-41000
类型检查器会为类型错误生成诊断信息,然后将其显示给用户。错误报告系统设计用于:
错误通过具有适当错误代码和消息的 Diagnostic 系统报告。
来源: src/compiler/checker.ts6000-6200 src/compiler/diagnosticMessages.json3000-3200
类型检查器实现了多种高级类型系统功能
类型检查器执行基于控制流的类型分析,根据条件和断言细化类型。这使得在 if 语句、类型保护之后可以缩小类型范围。
来源: src/compiler/checker.ts45000-46000 src/compiler/checker.ts50000-51000
类型检查器对条件类型(`T extends U ? X : Y`)和映射类型(`{ [K in keyof T]: ... }`)等高级类型功能有特殊处理。
这些复杂的类型操作涉及递归类型关系,通常需要谨慎的缓存来避免性能问题或无限递归。
来源: src/compiler/checker.ts55000-56000 src/compiler/checker.ts60000-61000
类型检查器通过语言服务提供支持许多 IDE 功能的信息
来源: src/services/services.ts100-200 src/services/types.ts10-100
类型检查器结合了多种优化策略
这些优化使得 TypeScript 能够以合理的性能处理大型代码库。
来源: src/compiler/checker.ts100000-101000
类型系统存在一些固有的限制,类型检查器必须设法解决这些限制。
类型检查器包含检测和处理类型系统中潜在无限递归的机制。
来源: src/compiler/checker.ts102000-103000
类型检查器是 TypeScript 的一个复杂的核心组件,它
其实现平衡了彻底的类型分析与性能考虑,以高效处理大型代码库。