技术

TypeScript 7.0 编译速度提升10倍——Vue、Svelte 和 Angular 需等待 7.1 版本

Adrian Kessler

VS Code 内置的 TypeScript 编译器此前检查编辑器自身代码库的完整副本需要 125 秒。TypeScript 7.0 完成同样的任务只需 10.6 秒。微软并未优化旧代码——而是将整个编译器运行时从 JavaScript 移植到了 Go,从而解锁了 JavaScript 引擎无法提供的多核并行能力。

这次移植并非从头重写。微软工程师表示,类型检查逻辑在结构上与 TypeScript 6.0 完全相同——同样的规则、同样的行为,只是翻译成了一种能在 CPU 核心间分配工作的语言。团队选择 Go 是因为原本以函数为主的 JavaScript 代码库几乎可以一对一地映射到 Go 的惯用写法。新运行时还引入了显式控制并行的标志:在当代工作站上传递 –checkers 8 参数,可使 VS Code 构建速度相比 TypeScript 6.0 提升 16.7 倍。Slack 的 CI 类型检查从 7.5 分钟降至 1.25 分钟。Bluesky 的构建从 24.3 秒降至 2.8 秒。这一模式在所有代码库中保持一致:随着项目规模增长,收益会进一步放大,因为瓶颈如今在于硬件,而非运行时。

TypeScript 7.0 发布时未附带公开的程序化 API——即构建工具在其自身代码中调用编译器时所使用的接口。每个主流 Web 框架的模板类型检查器都依赖于此。Vue 的 Volar 工具链、Svelte 的语言服务、MDX、Angular 的模板检查器:它们都无法在 TypeScript 7.0 上运行。像 ts-morph 和 ts-jest 这类暴露 TypeScript 编译器内部接口用于重构和测试的工具同样失效。微软已确认替代 API 计划在 TypeScript 7.1 中推出,预计于 10 月发布。使用上述任何框架或工具的项目暂时不应升级。

较旧的项目配置还会遇到另一组硬性障碍。TypeScript 7.0 将 6.0 版本中弃用的选项直接变为构建硬错误:ES5 编译目标、AMD 和 SystemJS 模块格式、经典模块解析方式以及 import 语句中的 assert 关键字都会导致构建直接失败。新的默认 tsconfig.json 不再自动加载 @types 包,这意味着那些依赖隐式类型发现而未显式声明类型依赖的项目将在导入时静默失败。微软提供了 typescript@npm:@typescript/typescript6 兼容垫片,供需要在新编译器旁继续运行 TS6 工具链的项目使用。

能够跨越这些障碍的项目——纯 Node.js 或 Deno 应用、不基于框架模板系统构建的浏览器应用、以及没有程序化 API 依赖的库——只需修改 package.json 即可升级。编辑器支持也遵循同样的分化:VS Code 现已提供专门的 TypeScript 7 扩展,内置支持正在迁移至语言服务器协议,以取代旧有的 TSServer 设计。同样依赖 TSServer 的 WebStorm 及其他编辑器仍在推进这一过渡。

TypeScript 7.1 目前计划于 2026 年 10 月发布,届时将提供 Vue、Svelte、Angular 和 MDX 工具链迁移所需的新编译器 API。当它到来时,历时 15 个月的 Go 移植所带来的性能提升将惠及整个生态系统。在此之前,Volar、SvelteKit 和 Angular 的项目页面均建议停留在 TypeScript 6.0.x 版本。

标签: , , ,

讨论

有 0 条评论。