TypeScript 7.0 发布说明:原生移植与性能提升

TypeScript 7.0 发布说明:原生移植与性能提升

TypeScript 7.0 通过 Go 原生移植实现了数量级的速度提升

TypeScript 7.0 是使用 Go 语言构建的 TypeScript 编译器的原生移植版本,旨在最大限度地利用现代硬件。通过实现共享内存多线程和原生代码优化,TypeScript 7.0 在完整构建时通常比 TypeScript 6.0 实现 8 倍至 12 倍的速度提升,同时降低了总内存消耗。

性能基准测试

在大型开源代码库上的实际测试表明,构建时间和内存使用量均显著减少:

Codebase TS 6 Build Time TS 7 Build Time Speedup Memory Delta
vscode 125.7s 10.6s 11.9x -18%
sentry 139.8s 15.7s 8.9x -6%
bluesky 24.3s 2.8s 8.7x -26%
playwright 12.8s 1.47s 8.7x -11%
tldraw 11.2s 1.46s 7.7x -15%

除了完整构建,编辑器的体验也得到了类似的加速。例如,在 VS Code 代码库中打开文件时,看到第一个错误所需的时间从 TypeScript 6 的 17.5 秒降至 TypeScript 7 的 1.3 秒以下。

并行化与扩展控制

TypeScript 7.0 将解析、类型检查和发射(emitting)过程并行化。为了针对特定硬件或 CI 环境优化性能,该版本引入了几个新标志:

  • --checkers: 控制类型检查器工作线程(worker)的数量(默认为 4)。增加此值可以提高高核心机器上的速度,但会增加内存使用量。将其减少到 1 可以消除资源受限环境中的重复工作。
  • --builders: 控制在 --build 操作期间使用的并行项目引用构建器(project reference builders)的数量,这对于 monorepos 特别有利。
  • --singleThreaded: 禁用所有并行化,将工作线程限制为 1,并强制解析和发射过程在单线程中进行。这主要用于调试或极其受限的环境。

重构的 Watch 模式

--watch 模式已使用 Parcel 打包器的文件监听器(file-watcher)的 Go 移植版本进行了完全重构。这种替换消除了对 C++ 工具链的需求,同时提供了高效、稳定且跨平台的语言文件监听。此更新带来了显著的资源改进和在不同操作系统上的更高稳定性。

与 TypeScript 6.0 的兼容性与迁移

TypeScript 7.0 与 TypeScript 6.0 的类型检查和 CLI 行为兼容,但它采用了 6.0 的默认设置,并将几个 6.0 的弃用项转换为了硬错误(hard errors)。

配置变更导致的破坏性变更

7.0 中的几个默认设置已更改:

  • strict 现在默认为 true
  • module 默认为 esnext
  • stableTypeOrdering 默认为 true 且无法禁用。
  • rootDir 现在默认为 ./,需要为内部源目录设置显式设置。
  • types 现在默认为 [](此前为 `[

Sources