编程 微软用 Go 重写了 tsc:VS Code 那 150 万行编译从 77.8s 降到 7.5s

2026-09-21 21:31:16

微软用 Go 重写了 tsc:VS Code 那 150 万行编译从 77.8s 降到 7.5s

TypeScript 编译器正在被用 Go 重写。这个原生移植(native port)项目代号 Corsa,产物就是 TypeScript 7;现有的 JS 实现对应 TypeScript 6。

官方说明是 Anders Hejlsberg 的博客《A 10x Faster TypeScript》,发布于 2025-03-11。代码在 microsoft/typescript-go,该仓库作为 staging 已完成并归档,代码合回了主仓库 microsoft/TypeScript

为什么要重写

代码库一大,tsc 的加载和检查时间就压不住。编辑器这边更尴尬:要么启动快,但语义不完整;要么等到完整语义出来,启动就慢。这两者只能选一个。原生实现的目标是编辑器启动时间大幅改善、多数项目构建时间降 10 倍、内存占用显著下降。

官方基准

跑的是 tsc,各项目数据如下:

项目行数旧实现原生实现加速
VS Code1,505,00077.8s7.5s10.4x
Playwright356,00011.1s1.1s10.1x
TypeORM270,00017.5s1.3s13.5x
date-fns104,0006.5s0.7s9.5x
tRPC server+client18,0005.5s0.6s9.1x
rxjs2,1001.1s0.1s11.0x

编辑器场景单独看一组:VS Code 代码库整项目加载从约 9.6s 降到 1.2s,约 8 倍;内存约为旧实现的一半,而且这部分还没有专门做过优化。

怎么用

预览包发布在 npm 上,包名 @typescript/native-preview

npm install @typescript/native-preview
npx tsgo

tsgo 直接当 tsc 用。到 TypeScript 7.0 RC 及之后的版本,命令名就是 tsc,不需要再记这个别名。

编辑器里可以装 VS Code 预览扩展 TypeScriptTeam.native-preview,然后把设置项开起来:

{
  "js/ts.experimental.useTsgo": true
}

功能状态

README 里给了一张状态表,分三档。

已完成(done):Program creation、Parsing / scanning、tsconfig 解析、Type resolution、Type checking、JS + JSDoc 推断、JSX、Declaration emit、Emit(JS)、Watch mode、Build mode / project references、Incremental build。

这一档的行为对齐口径是:相同的语法错误、相同的类型错误位置与消息。也就是说,编译报错不会因为你换了实现而换了一套说法。唯一的例外是声明输出——这里有意与旧版不同,更接近 TS 声明文件的形态,所以 .d.ts 的 diff 需要单独过一遍。

进行中(in progress):Language service(LSP),大部分功能已经实现。这一块同时做了一件顺带的事:从旧的自研协议转向 LSP。

未就绪(not ready):API。

有意差异的完整清单在仓库的 CHANGES.md 里,升级前值得对着读一遍。

版本路线

两条线并行:JS 代码库继续走 6.x,TS 6.0 会引入一批与 native 对齐的废弃和破坏性改动;native 实现达到足够对等之后,发布为 TypeScript 7.0。两个版本会尽量保持对齐,项目可以按需升级,也可以回退。

取舍与不兼容点

不是所有项目都能一上线就切到原生实现。依赖旧 API、旧配置等约束的项目,得继续留在 TypeScript 6——API 一侧目前还是 not ready,语言服务也还在补。Go 原生实现带来了并发和内存上的优势,代价是语言服务和 API 生态需要重新适配。

换句话说,编译和类型检查这条路径现在就能拿 tsgo 试;工具链里那些依赖 TypeScript 编译器 API 的东西,还得等。


项目地址与公告

  • 官方博客《A 10x Faster TypeScript》(Anders Hejlsberg,2025-03-11):https://devblogs.microsoft.com/typescript/typescript-native-port/
  • 原生实现仓库(staging,已归档,代码合回主仓库):https://github.com/microsoft/typescript-go
  • 主仓库:https://github.com/microsoft/TypeScript
复制全文 生成海报 Go TypeScript 编译器 tsgo 性能优化

推荐文章

程序员茄子在线接单