TypeScript 7.0正式发布:Go重写编译器提速10倍,VS Code编译从78秒压到7.5秒

微软TypeScript团队正式推出7.0版本,代号Corsa。这次更新动了语言史上最核心的一块地基:整套编译器和语言服务全部用Go语言重写。官方实测数据摆在桌面上——VS Code整个代码库约150万行,全量类型检查从77.8秒压到7.5秒,提速10.4倍。Sentry的构建从139.8秒压到15.7秒,内存占用还降了6%到26%。

跑了十几年的JavaScript编译器,这次彻底换了心脏。

一组真实数据:提速到底有多猛

微软在发布前拿多家公司的大型代码库做了验证:

  • VS Code:150万行,TS 6耗时77.8秒,TS 7只花7.5秒,提速10.4倍
  • Playwright:35.6万行,11.1秒压到1.1秒,提速10.1倍
  • TypeORM:27万行,17.5秒压到1.3秒,提速13.5倍
  • date-fns:10.4万行,6.5秒压到0.7秒,提速9.5倍
  • tRPC:1.8万行,5.5秒压到0.6秒,提速9.1倍

连2100行的小项目rxjs也从1.1秒压到0.1秒。提速与代码规模无关,人人有份。

编辑器体验的变化更明显。大型项目里打开一个类型报错,从17.5秒压到1.3秒,提速13倍。Find All References和Go to Definition这两个每天点几百次的操作,现在基本秒开。语言服务崩溃率降了60%,失败命令降了80%——这份数据来自Slack、Figma和Google的实测环境。

为什么选Go,不选Rust

Hacker News上吵得最凶的就是这个问题。TypeScript团队给的解释很实在:他们要的是一次”翻译”,一次按bug对bug兼容标准的移植。Go的垃圾回收和简单内存模型,恰好适合编译器里大量存在的循环引用结构。Rust的借用检查器在这个场景下反而会成为阻力。

有开发者的总结很到位:Go写起来快,照着旧代码1:1重写即可。Rust也许能再快20%,但TypeScript换上Go已经拿到10倍提升,这笔账怎么算都划算。

破坏性变更清单:升级前先自查

7.0版本并非无缝替换,几个硬性变更需要提前处理:

默认配置全面收紧。 `strict`模式默认开启,`module`默认值改为`esnext`,`types`默认改为空数组,不再自动引入`@types`包。

旧配置直接报错。 `target: “es5″`被移除,AMD、UMD、SystemJS等旧模块体系全部停止支持,`baseUrl`被砍掉,改用`paths`替代,`downlevelIteration`被移除。

还在用ES5目标的老项目(典型的旧版Angular应用)必须先升级目标版本。模块解析还停留在`node`模式的项目,需要迁移到`node16`或`bundler`。好在大部分迁移工作只涉及`tsconfig.json`的修改,业务代码基本不用动。

最大的坑:编程API缺席

Vue、MDX、Astro、Svelte、Angular的模板工具链暂时无法用上TS 7,原因只有一个——7.0版本没有附带编程API,这项能力要等7.1才补齐。

官方给出的过渡方案是双安装:`typescript`装7.0跑命令行编译,再装一个TS 6的兼容包,框架工具链继续用旧版。配置略繁琐,但能先享受CLI层面的提速红利。

并行调优:压榨多核的三个开关

新版编译器暴露了实验性参数,可以精细控制并行行为:

  • `–checkers`:控制类型检查的worker数量,默认4个。在16核机器上调到8,VS Code实测冲到16.7倍提速
  • `–builders`:管理项目引用的并行构建
  • `–singleThreaded`:关闭并行,调试场景专用

worker数量调高会换来更高内存占用。2核的CI机器上保持默认值更划算。

`–watch`模式也重做了,文件监听换成了Parcel文件监视器的Go移植版,告别旧的轮询机制,大项目下资源占用明显下降。

迁移指南:三步完成切换

第一步,装beta包:`npm install -D @typescript/native-preview`。注意命令叫`tsgo`,旧的`tsc`暂时保留给TS 6。

第二步,跑双编译对比:`tsgo –build`和`tsc –build`并行执行,比对输出差异,确认配置兼容性。

第三步,VS Code用户装上TypeScript Native Preview扩展,编辑器即可切换到原生引擎。团队成员实测两周,IDE零崩溃。

正式稳定后,包名会回归`typescript`,命令名回归`tsc`。

写在最后

TypeScript 6走向可擦写类型,7.0把完整编译路径提速10倍,两条路线都通了。编译从”显著摩擦”变成”几乎无感”,类型检查从成本项变成免费资源,开发者会更频繁地跑检查、更早地抓住错误。

前端工程化这十四年,编译速度一直是绕不开的痛点。微软这次用一门系统语言解决另一门语言的性能问题,给整个工具链开发提供了新范式。还在犹豫的团队,本周就让`tsgo`和`tsc`并行跑起来,用自己的代码库验证一遍,数据比任何评测都有说服力。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

苏ICP备2025163703号-2   警徽苏公网安备32010502011527号