本文档提供了 TypeScript 代码库架构的高级概述。TypeScript 是微软的、可编译为纯 JavaScript 的 TypeScript 超集。本概述解释了 TypeScript 编译器、语言服务及相关基础设施的主要组件,帮助开发人员理解各部分如何协同工作。
TypeScript 仓库组织成几个关键目录和组件
typescript/
├── src/
│ ├── compiler/ - Core compiler implementation
│ ├── services/ - Language service API for editor integration
│ ├── server/ - Implementation of the tsserver for IDE integration
│ ├── harness/ - Testing infrastructure
│ └── deprecatedCompat/ - Code for backward compatibility
├── lib/ - Built library output and declaration files
├── tests/ - Test cases and fixtures
└── scripts/ - Build and release scripts
Sources: src/compiler/types.ts package.json
Sources: src/compiler/types.ts src/compiler/checker.ts src/services/services.ts
TypeScript 架构可分为几个主要系统
Sources: src/compiler/scanner.ts src/compiler/parser.ts src/compiler/binder.ts src/compiler/checker.ts src/compiler/emitter.ts
TypeScript 编译过程遵循以下阶段
scanner.ts): 将源文本转换为令牌流parser.ts): 将令牌转换为抽象语法树 (AST)binder.ts): 为声明创建符号并构建符号表checker.ts): 执行类型分析和验证emitter.ts): 生成 JavaScript 输出、声明文件和源映射| 数据结构 | 描述 | 主文件 |
|---|---|---|
节点 | 所有 AST 节点的基类接口 | types.ts |
源文件 | 表示 TypeScript 源文件 | types.ts |
符号 | 表示命名声明 | types.ts |
类型 | 表示 TypeScript 类型 | types.ts |
程序 | 源文件和编译选项的集合 | program.ts |
诊断 | 错误、警告或建议 | types.ts |
Sources: src/compiler/types.ts src/compiler/program.ts
语言服务作为编辑器/IDE 与 TypeScript 编译器之间的接口。它为 IntelliSense、代码导航和重构等编辑器功能提供了更高级别的 API。
Sources: src/services/services.ts src/server/session.ts src/server/protocol.ts
| 功能 | 描述 | 实现 |
|---|---|---|
| 自动补全 | 代码补全建议 | completions.ts |
| 快速信息 | 鼠标悬停时的类型信息和文档 | services.ts |
| 查找引用 | 查找符号的所有引用 | findAllReferences.ts |
| 代码修复 | 常见错误的自动修复 | importFixes.ts 及其他 |
| 格式化 | 代码格式化和美化 | services.ts |
| 重构 | 代码转换(重命名、提取函数等) | services.ts |
Sources: src/services/completions.ts src/services/findAllReferences.ts src/services/codefixes/importFixes.ts
TypeScript 的项目系统管理项目配置、文件关系,并支持高效的增量编译。
Sources: src/compiler/program.ts src/compiler/commandLineParser.ts src/server/project.ts
TypeScript 的增量编译系统(--incremental 标志)工作原理如下:
.tsbuildinfo 文件中以供将来进行编译项目引用功能(--build 模式)扩展了此功能,以支持 TypeScript 项目之间的依赖关系,允许将大型代码库分解为更小、更易于管理的部分。
Sources: src/compiler/program.ts src/server/project.ts
TypeScript 的类型系统丰富而复杂,支持广泛的类型模式和功能。
来源: src/compiler/checker.ts src/compiler/types.ts
TypeScript 包含标准 JavaScript API、DOM 和其他 Web 平台功能的内置类型定义。这些定义以层级结构组织,以支持不同的目标环境。
标准库的类型定义位于 lib 文件夹中,并根据其目标命名,例如:
lib.es5.d.ts - ECMAScript 5 定义lib.es2015.d.ts - ECMAScript 2015 (ES6) 定义lib.dom.d.ts - DOM API 定义lib.webworker.d.ts - Web Worker API 定义来源: src/compiler/utilities.ts lib/lib.es5.d.ts
TypeScript 的构建系统旨在确保代码质量和促进发布。
来源: package.json package-lock.json
TypeScript 的存储库使用一个名为“Hereby”(在 Herebyfile.mjs 中定义)的构建系统来进行任务编排。常见任务包括:
持续集成系统会对 pull 请求和 commit 进行自动检查,以确保代码质量和兼容性。
来源: package.json
TypeScript 提供了命令行界面 (CLI) 和编程 API,用于集成到其他工具中。
| 命令 | 描述 |
|---|---|
tsc | TypeScript 编译器 |
tsserver | TypeScript 语言服务器 |
来源: package.json
TypeScript API 通过几个入口点公开:
API 版本在 src/services/services.ts 文件中定义为 servicesVersion(在检查的代码中为 0.8)。
来源: src/services/services.ts360-361
TypeScript 的架构设计为模块化和可扩展。核心编译器管道将 TypeScript 代码转换为 JavaScript,而语言服务提供丰富的工具集成。项目系统能够对大型代码库进行高效的增量编译,而类型系统则提供全面的静态类型检查。
本概述为理解 TypeScript 代码库提供了基础。有关各个组件的更具体信息,请参阅本 wiki 的其他页面。