菜单

项目组织

相关源文件

本文档介绍了 TypeScript 仓库的结构、配置文件、开发工作流程和贡献者的最佳实践。有关 TypeScript 编译器架构的信息,请参阅 编译器核心,有关构建系统详细信息,请参阅 构建系统

仓库结构概述

TypeScript 仓库遵循特定的组织结构,以支持 TypeScript 编译器及相关工具的开发、测试和维护。

来源: CONTRIBUTING.md1-176 README.md1-51 .gitignore1-67

源代码组织

TypeScript 源代码主要位于 src 目录中,其中包含几个关键子目录

目录目的
src/compiler/核心 TypeScript 编译器实现
src/services/用于编辑器集成的 TypeScript 语言服务
src/server/TypeScript 语言服务器 (tsserver)
src/lib/标准库的声明文件
src/harness/测试基础设施

src/lib/ 中的库声明文件定义了标准 JavaScript API、DOM 接口等的 TypeScript 类型定义。这些文件经过精心管理,因为它们定义了标准的类型化环境。

来源: CONTRIBUTING.md150-158 src/lib/README.md1-27

构建输出结构

构建过程在 built/ 目录中生成编译后的输出

目录描述
built/local/本地构建的输出
lib/库文件的最后已知良好 (LKG) 版本

构建系统会将 TypeScript 源代码编译到 built/local/ 目录中,其中包含构成 TypeScript 编译器和语言服务的已编译 JavaScript 文件。

来源: CONTRIBUTING.md150-170 .gitignore1-67

测试基础设施

TypeScript 仓库在 tests/ 目录下组织了全面的测试系统

来源: CONTRIBUTING.md175-267

配置文件

TypeScript 仓库包含几个重要的配置文件

文件目的
tsconfig.jsonTypeScript 编译器配置
.gitignore指定要从版本控制中排除的文件
package.jsonNPM 包定义和脚本
scripts/tsconfig.json构建脚本的配置
.eslintrc.json代码 lint 规则

来源: .gitignore1-67 scripts/tsconfig.json1-26

开发环境

该仓库支持使用 Visual Studio Code 进行开发,并提供了一个用于容器化开发的 devcontainer 配置

来源: CONTRIBUTING.md94-101 .devcontainer/devcontainer.json1-45 scripts/hooks/pre-commit1-5 scripts/hooks/post-checkout1-3 scripts/link-hooks.mjs1-28

构建和测试工作流

TypeScript 仓库使用 hereby 命令行工具进行构建和测试

来源: CONTRIBUTING.md59-89 CONTRIBUTING.md175-267

贡献流程

TypeScript 项目遵循特定的贡献流程

来源: CONTRIBUTING.md48-170 .github/pull_request_template.md1-22

拉取请求(PR)要求

提交拉取请求到 TypeScript 仓库时,请确保您的 PR 符合以下要求

  1. 在“待办事项”里程碑中有一个相关的 issue
  2. 代码已更新至 main 分支
  3. 您已成功在本地运行 hereby runtests
  4. 有新的或已更新的单元测试来验证更改
  5. PR 符合 TypeScript 编码指南

您的 PR 应包含

  • 对您的更改做了什么的描述
  • 充分的测试来覆盖更改
  • 如有必要,请更新基线

来源: CONTRIBUTING.md134-145 .github/pull_request_template.md1-22

添加测试

测试是 TypeScript 仓库质量保证的关键部分

关于测试的关键点

  • 在合适的 tests/cases/ 子目录中添加一个 .ts 文件
  • 测试支持元数据标签,格式为 // @metaDataName: value
  • fileName 标签可以将部分内容划分为独立的编译单元
  • 测试会生成必须进行验证的基线

来源: CONTRIBUTING.md212-224 CONTRIBUTING.md241-267

库声明管理

TypeScript 仓库有管理库声明文件的特殊流程

目录目的
src/lib/库声明文件的源位置
lib/用于引导的最后已知良好版本
built/local/库文件的构建版本

某些库文件是生成的,不应直接修改

  • src/lib/dom.generated.d.ts
  • src/lib/webworker.generated.d.ts

对于这些文件,应将更改定向到 TSJS-lib-generator repository

来源: CONTRIBUTING.md150-170 src/lib/README.md1-27

GitHub 工作流和 CI/CD

TypeScript 存储库使用 GitHub Actions 进行持续集成和交付

该存储库还有用于问题管理和维护任务的工作流。

来源: .github/workflows/pr-modified-files.yml1-136 .github/workflows/close-issues.yml1-51

最佳实践

代码组织最佳实践

  1. 新代码遵循现有目录结构
  2. 将测试放在 tests/cases/ 下的相应子目录中
  3. 在正确的位置更新库定义
  4. 尊重编译器、服务和服务器组件的分离

Git 工作流最佳实践

  1. 为功能或修复使用描述性的分支名称
  2. 避免强制推送更改,尤其是在更新 PR 时
  3. 保持更改专注于单个问题
  4. 使用提供的 git hooks 进行一致的代码格式化

来源: CONTRIBUTING.md146-149 scripts/hooks/pre-commit1-5

文档最佳实践

  1. 进行更改时更新相关文档
  2. 记录 API 表面的破坏性更改
  3. 确保诊断消息已正确本地化
  4. 在行为更改时更新基线

来源: CONTRIBUTING.md268-272