菜单

概述

相关源文件

本文档提供了 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 架构可分为几个主要系统

  1. 编译器核心:TypeScript 系统的基础,负责解析、绑定、类型检查和发出 JavaScript 代码。
  2. 类型检查器:负责所有类型分析和验证的核心组件。
  3. 语言服务:提供编辑器友好的 API,用于代码补全、重构和错误报告等功能。
  4. 项目系统:管理项目配置、文件关系和增量编译。
  5. 类型定义:提供标准库和 DOM API 的类型定义。

编译管道

编译过程图

Sources: src/compiler/scanner.ts src/compiler/parser.ts src/compiler/binder.ts src/compiler/checker.ts src/compiler/emitter.ts

TypeScript 编译过程遵循以下阶段

  1. 扫描器 (scanner.ts): 将源文本转换为令牌流
  2. 解析器 (parser.ts): 将令牌转换为抽象语法树 (AST)
  3. 绑定器 (binder.ts): 为声明创建符号并构建符号表
  4. 类型检查器 (checker.ts): 执行类型分析和验证
  5. 转换管道:将转换应用于 AST(降级、模块转换)
  6. 发射器 (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 标志)工作原理如下:

  1. 分析上次编译以来哪些文件发生了更改
  2. 识别哪些其他文件可能受这些更改的影响
  3. 仅重新类型检查和重新发出受影响的文件
  4. 将构建信息存储在 .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

构建与 CI 系统

TypeScript 的构建系统旨在确保代码质量和促进发布。

构建系统架构

来源: package.json package-lock.json

关键构建命令

TypeScript 的存储库使用一个名为“Hereby”(在 Herebyfile.mjs 中定义)的构建系统来进行任务编排。常见任务包括:

  • 构建编译器和语言服务
  • 生成声明文件
  • 运行测试
  • 代码 linting 和格式化
  • 发布版本

持续集成系统会对 pull 请求和 commit 进行自动检查,以确保代码质量和兼容性。

来源: package.json

CLI 和 API 用法

TypeScript 提供了命令行界面 (CLI) 和编程 API,用于集成到其他工具中。

命令行工具

命令描述
tscTypeScript 编译器
tsserverTypeScript 语言服务器

来源: package.json

API 入口点

TypeScript API 通过几个入口点公开:

  1. 编译器 API:允许以编程方式进行编译,供构建工具使用
  2. 语言服务 API:提供 IDE 功能,供编辑器扩展使用
  3. 服务器 API:实现 TypeScript 服务器协议

API 版本在 src/services/services.ts 文件中定义为 servicesVersion(在检查的代码中为 0.8)。

来源: src/services/services.ts360-361

结论

TypeScript 的架构设计为模块化和可扩展。核心编译器管道将 TypeScript 代码转换为 JavaScript,而语言服务提供丰富的工具集成。项目系统能够对大型代码库进行高效的增量编译,而类型系统则提供全面的静态类型检查。

本概述为理解 TypeScript 代码库提供了基础。有关各个组件的更具体信息,请参阅本 wiki 的其他页面。