TypeScript 7.0 正式发布:Go 重写带来最高 12 倍速度提升

TypeScript 7.0 正式发布:Go 重写带来最高 12 倍速度提升

2026 年 7 月 8 日,微软正式发布 TypeScript 7.0。这个版本的里程碑意义在于:整个编译器用 Go 语言从头重写,完整构建速度提升 8 到 12 倍,同时内存占用也显著降低。

TypeScript 6 vs 7 构建速度对比

为什么用 Go 重写

TypeScript 最初由 TypeScript 自身编写(自举编译器),经过十多年的发展积累了庞大的代码量。随着前端项目规模不断增长,编译速度成为开发者最频繁遇到的瓶颈,尤其在大型 monorepo 中,一次完整类型检查可能需要数分钟。

微软团队在 2025 年启动了原生重写计划,目标是利用现代多核 CPU 的并行计算能力。Go 语言的共享内存多线程模型天然适合这个需求。重写过程中,团队尽可能保持原有代码结构和逻辑不变,确保新旧编译器产出的类型检查结果完全一致。

TypeScript 7 带来了三个关键变化:

  1. 原生代码执行速度:Go 编译为原生二进制,不再依赖 Node.js 运行时
  2. 共享内存多线程:解析、类型检查、代码生成可以并行执行
  3. 全新 watch 模式:基于 Parcel bundler 的文件监视器,跨平台更稳定

真实项目基准测试

微软在五个大型开源项目上对比了 TypeScript 6 和 7 的完整构建时间:

项目TypeScript 6TypeScript 7加速比
VS Code125.7s10.6s11.9x
Sentry139.8s15.7s8.9x
Bluesky24.3s2.8s8.7x
Playwright12.8s1.47s8.7x
tldraw11.2s1.46s7.7x

内存方面同样有改善:

项目TypeScript 6TypeScript 7内存变化
VS Code5.2GB4.2GB-18%
Sentry4.9GB4.6GB-6%
Bluesky1.8GB1.3GB-26%
Playwright1.0GB0.9GB-11%
tldraw0.6GB0.5GB-15%

TypeScript 6 vs 7 内存占用对比

编辑器体验的质变

对开发者日常体验影响最大的是编辑器响应速度。在 VS Code 代码库中,打开一个包含类型错误的文件,从编辑器启动到看到第一个错误提示:

  • TypeScript 6:约 17.5 秒
  • TypeScript 7:不到 1.3 秒

find-all-references、自动补全、实时诊断等高频操作的延迟都大幅缩短。TypeScript 7 的语言服务器基于 LSP(Language Server Protocol),已适配 VS Code、Visual Studio、WebStorm 等主流编辑器。

根据微软的数据,TypeScript 7.0 的新语言服务器将失败的语言服务器命令减少了 80% 以上,服务器崩溃减少了 60% 以上。

新增并行控制参数

TypeScript 7 引入了两个实验性参数来精细控制并行度:

--checkers N

控制类型检查器的工作线程数,默认为 4。在 CPU 核心较多的机器上可以调高。例如使用 --checkers 8 时,各项目加速比进一步提升:

项目TypeScript 6TypeScript 7 (--checkers 8)加速比
VS Code125.7s7.51s16.7x
Sentry139.8s12.08s11.6x
Bluesky24.3s2.01s12.1x
Playwright12.8s1.16s11x
tldraw11.2s1.06s10.6x

代价是内存占用增加,因为每个类型检查器 worker 会维护自己的类型信息视图。在 CI 环境(CPU 核心少、内存有限)中,可以将 --checkers 调低到 1 来避免不必要的开销。

--builders N

控制项目引用(project references)的并行构建器数量,适合 monorepo 场景。--builders--checkers 有乘积效应:--checkers 4 --builders 4 意味着最多 16 个类型检查线程同时运行,可能过于激进。

--singleThreaded

完全关闭并行化,解析、类型检查、代码生成全部在单线程中执行。适用于调试、与 TypeScript 6 性能对比、外部编排并行构建、或资源极度受限的环境。

与 TypeScript 6 共存方案

TypeScript 7.0 目前尚未公开编译器 API(预计 7.1 版本提供)。对于 typescript-eslint 等需要程序化访问编译器的工具,微软提供了兼容方案。

新的 @typescript/typescript6 包导出 tsc6 可执行文件和 TypeScript 6.0 的完整 API。通过 npm alias 可以让两个版本在同一项目中共存:

json
{
  "devDependencies": {
    "@typescript/native": "npm:typescript@^7.0.2",
    "typescript": "npm:@typescript/typescript6@^6.0.2"
  }
}

这样,依赖 typescript 包的工具(如 typescript-eslint)继续使用 6.0 API,而 npx tsc 直接使用 7.0。

Vue、Svelte 等嵌入式语言工具链因依赖编译器 API 集成,目前仍需使用旧版 TypeScript。

企业级实践反馈

多家公司在正式发布前参与了测试:

  • Slack:CI 类型检查时间从 7.5 分钟降到 1.25 分钟,合并队列等待时间减少 40%。此前编辑器加载慢到几乎不可用,工程师只能依赖 CI 做完整类型检查
  • 微软 News Services:每月节省 400 小时 CI 构建等待时间
  • Canva:编辑器首次报错时间从 58 秒降到 4.8 秒
  • Vanta:最大项目获得 9 倍加速
  • PowerBI:工程师在 rename 功能尚未支持时就将其设为默认体验

微软内部参与测试的团队包括 Loop、Office、Teams、Xbox。外部合作公司包括 Bloomberg、Figma、Google、Linear、Miro、Notion、Sentry、Slack、Vercel 等。

安装方式

bash
npm install -D typescript

此前通过 @typescript/native-preview 安装的用户(周下载量超过 850 万次),未来可通过 typescript@next 获取 nightly 构建。

watch 模式重建

TypeScript 7 的 --watch 模式完全重建,基于 Parcel bundler 的文件监视器实现跨平台高效监视。Go 标准库不提供内置文件监视 API,团队评估了多个第三方库后选择自建方案,解决了稳定性和跨平台兼容问题。


来源:Announcing TypeScript 7.0 - Microsoft DevBlogs(2026-07-08)