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现在默认为[](此前为 `[