👇 今日要闻
打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。
去年,TS 团队官宣要使用 Go 语言移植 TS 编译器,重写 TS 生态。
今年年初,TS 的原生移植版尚未发布,但 GitHub 的年度报告却爆料 TS 登顶 GitHub 第一编程语言,活跃度最高,但 TS 并因此就放慢脚步。

今年第一季度,TS 6 发布,这是基于 JS 的最后一个主版本,但已经提前兼容 TS 7 的默认配置;随后 TS 团队接连发布了 TS 7 的公测版和候选版。
直至今日,TS 团队终于官宣,TS 7.0 正式首发!!!

这是 TS 的第 7 个主版本,也是第 1 个基于 Go 实现的原生移植版,性能暴涨 10 倍,是 TS 进化史上具有划时代意义的一个里程碑。
本期我们来看看 TS + Go 破而后立有哪些颠覆性成果,以及目前迁移有哪些注意事项。
👉 VS Code 原地起飞
TS 7 充分榨干了 Go 语言的性能优势,主要有三大优化:
- 内存占用断崖式下跌
- 构建速度井喷式暴涨
- VS Code 等编辑器启动速度飙升
如果你看过《TS 官方纪录片》,就会知道,TS 不仅是微软早期的开源项目,也是 VS Code 的伴生项目,TS 就是为了开发 VS Code 的产品原型才应运而生的。
因此,TS 7 正式首发,VS Code 首当其冲,顺理成章成为最大的利益既得者。
首先,TS 7 的项目构建时间减少,构建速度飙升:
| 仓库 | TS 6 | TS 7 | 速度 |
|---|---|---|---|
| vscode | ~126s | ~11s | 11.x |
以前,你在编译一个类似 VS Code 的大型项目时,你可以慢悠悠地先去泡上一杯咖啡,因为构建需要耗时几分钟;现在你顶多只能啜一口咖啡,因为它几秒钟就搞定了。
TS 官方给出的性能跑分图如下:

可以看到,编译时间直接从 TS 6 黄色的长长一条变成 TS 7 的短短一根!
其次,TS 7 性能更棒的同时,内存占用不增反减:
| 仓库 | TS 6 | TS 7 | 内存 |
|---|---|---|---|
| vscode | ~5GB | ~4GB | -18% |
TS 团队同样给出了内存跑分图:

以前,大型项目加载和类型检查提示可能延迟约 17 秒,现在直接秒开,即时响应不到 1.3 秒,速度相差了 13 倍,纵享丝滑的开发体验。
俗话说得好,风口来了,猪都要飞。借着 TS + Go 的这波基建革命和性能风暴,VS Code 直接原地起飞。
👉 TS 7 技术内幕
TS 7 之所以能拥有史上最高性能,主要因为它现在基于 Go 语言实现,脱钩 JS 的单线程模型,支持并行执行,包括解析和类型检查等。
举个栗子,新版 TS 默认开启 4 个类型检查工作者线程,但它也支持通过 --checkers 灵活配置。

如果你的机器拥有更多 CPU 内核和内存,增加线程数能加快构建速度,内存占用也会增加。反之亦然,你可以指定 --checkers 1,将类型检查切换为单线程模式。
同理,项目构建也能通过 --builders 开启并行,这特别适合 Monorepo 项目。构建和类型检查能梦幻联动,比如 --checker 4 --builders 4 最多能同时运行 16 个类型检查器。
此外,TS 7 重做了 --watch 监视模式。VS Code 长期依赖 Parcel 打包器的文件监视器 @parcel/watcher,但它使用 C艹 实现。
为此,TS 团队基于 Go 移植了同款文件监视器,同时进行优化,提供高效稳定的跨平台文件监视功能。
👉 TS 7 升级须知
TS 7 和 TS 6 的类型检查、默认设置和 CLI 命令行行为兼容,因此如果你的项目已经采用了 TS 6,基本支持无缝升级。
但由于 TS 6 和 TS 7 先后都是在今年码不停蹄地上线,很多旧项目可能还愣在 TS 5 发呆,这种情况下建议先将项目升级到 TS 6,再升级到 TS 7。
TS 6 和 TS 7 与 TS 5 的不同主要体现在三个方面:
- 编译器的默认配置更加现代化
- 静态类型系统的部分类型体操改动
- JS 的行为有所不同,尤其是 JSDoc 注释
举个栗子,官方给出的一个 infer 推断模板字面量的"类型体操":

JS 中某些 emoji 表情需要两个 UTF-16 的字符串组成代理对来表示,以前 TS 对这种模板字面量头尾推断时,会将代理对分离,emoji 会被推断为两个 UTF-16 字符串;现在,TS 7 会保留完整的代理对,这样 emoji 的匹配更符合直觉。
更重要的是,编译器的默认配置更新了,主要包括:

现在,TS 7 默认启用类型系统的严格模式,编译目标不再支持 es5,过时的 umd 等模块系统通通报废。
TS 6 和 TS 7 的整体基调是与时俱进,面向现代化的前端开发,所以大多数调整是废弃过时的技术,拥抱主流的行业标准。TS 5 升级到 TS 6 的完整升级指南可以参考 TS 6 官方博客(文末有另一篇博客链接)。
👉 TS 7 的未来规划
目前,TS 7 最好和 TS 6 共用,原因之一是 TS 7 目前只提供了编译器和语言服务,但没有附带编程式的 API。
也就是说,typescript-eslint 之类的工具暂时没有 TS 7 的 API 可以调用,所以只能继续使用 TS 6。
目前建议使用 TS 官方的兼容包 @typescript/typescript6:

然后在 package.json 中添加 TS 7 的别名:

这样,使用 npx tsc 时就能使用 TS 7 的编译器,同时还能通过兼容包访问 TS 6 的编程式 API。
同理,由于 TS 的编程式 API 暂不支持,目前 Vue、Svelte 和 Angular 等框架暂时还无法直接使用 TS 7,像 Volar 等语言服务工具或框架的模板编译器目前只能依赖 TS 6。
不过不用太过担心,TS 7 的编程 API 预计会在下一个次版本升级时提供。
👇 重点总结
TypeScript 7 正式首发 ,这是一个逆天改命的主版本,基于 Go 语言移植重写,底层基建并行化,性能提升至少 10 倍,内存占用降低。

VS Code 等项目都能享受这波性能福利,编辑器秒开,纵享丝滑的开发体验。大型项目的构建时间大幅缩减,以前你上个厕所回来,TSC 可能还在汗流浃背埋头猛干,现在你裤子还没脱,它可能就结束了。
另一个有趣的灵魂拷问是,Bun 原本基于 Zig 语言开发,突然切换赛道移植到 Rust,不知道 TS-Go 未来会不会也被 Rust "锈化"?
虽然 TS 团队之前在对比方案中押注 Go 语言,但 GitHub 社区对 Rust "锈化" TS 编译器一向乐此不疲,而且已经有人在这么干了......
👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。
🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:
- 🔗 TS 6 技术细节 :mp.weixin.qq.com/s/35uWYu50q...
- 🔗 TS 7 官方博客 :devblogs.microsoft.com/typescript/...