返回

文章详情

TypeScript 7 RC:编译器重写为 Go,速度提升约 10 倍

Hacker News2026年6月21日 10:52

微软刚刚发布了 TypeScript 7 的候选版本,稳定版预计下个月发布。而这次最大的亮点,不是新的语法或其他配置标志,而是整个编译器已重写为 Go。在过去的一年里,团队将现有代码库(到现在为止,TypeScript 编译为 JavaScript)移植到了 Go。过程是有条不紊的,基于当前实现,而不是从零重写,因此类型检查逻辑在结构上与 TypeScript 6 保持一致。你不需要改变编写 TypeScript 的方式,只需享受更高的速度。为什么速度这么快?这种加速不是魔法,而是来自语言本身。Go 编译为本机代码并利用共享内存实现并行性。微软报告的结果表明,构建速度常常比 TypeScript 6 快大约 10 倍。这个数字来自他们自己的测量,以及 Figma、Bloomberg、Vercel、Notion 和 Slack 等公司,它们已经测试了超过一年的预发布版本,并报告了类似的提升。而且,这并不仅限于 tsc 命令行。语言服务器协议(LSP),即为你的编辑器提供自动补全、类型悬停和实时错误的东西,运行在相同的基础上。因此,编辑器响应速度更快,这可能是你在大型项目中最能感受到的变化。该仓库是开源的(Apache 2.0,GitHub 上超过 25,000 颗星)且约 85% 是 Go。对于这样大规模的项目,从微软出发,选择 Go 并不是显而易见的选择。TypeScript 6,是你不应跳过的一步。TypeScript 7 继承了 TypeScript 6 的默认设置,而在 6 中被弃用的任何内容现在都会变为硬错误。由于 6 仍然很新,很多项目都需要适应。这正是 6 的用途:它没有带来大的新特性,而是为 7 设定了舞台。它提醒你在 7 中将被淘汰的选项和语法。团队的建议,我的建议:先移动到 6,消除那些警告,然后跳到 7,没有意外。成为 7 硬错误的一些示例:target: es5,moduleResolution: node,baseUrl,或 module: amd/umd/systemjs。在默认设置方面,strict 现在是 true,module 是 esnext。两个变化让人措手不及,值得关注:rootDir 现默认值为 ./(你通常需要将其指回 ./src),而类型默认值为 [],因此你必须显式列出你的 @types 包。并行运行 6 和 7 并不是所有工具都会在短期内与 7 兼容。比如 typescript-eslint,直接导入 typescript 包,而稳定的程序性 API 首先要等到 TypeScript 7.1,几个月后才能到来。微软设置了这个,以便两个版本能够共存而不互相干扰。一个兼容包 @typescript/typescript6 提供了一个 tsc6 二进制文件并重新导出 6 的 API。窍门是在你的 package.json 中使用 npm 别名: { "devDependencies": { "typescript": "npm:@typescript/typescript6@^6.0.0", "typescript-7": "npm:typescript@rc" } } 你 linter 查找的 typescript 包实际上指向 6,这是稳定的,工具期望的,而 npx tsc 则在整个项目中使用 7。这是一本教科书式的并行变化:6 使 linting 保持整洁,而 7 则使其他所有事情更快。工具的兼容性应该在 7.1 附近稳定下来。并行化、检查器和监视模式 TypeScript 7 并行化了几个步骤:解析、类型检查和发出。解析和发出可以很容易地跨文件分开。类型检查更复杂,因为文件之间存在依赖关系,因此团队启动了固定数量的工作者,共享工作以确定性方式进行:相同的输入文件,相同的输出结果。默认情况下,你可以获得 4 个工作者,可以使用 --checkers 调整。如果你有更多的核心,可以提高这个数字,但会消耗更多内存。在紧张的 CI 运行器上,可以降低这个数字。还有 --builders,可以同时构建 monorepo 中的多个项目。要注意,效果会与 --checkers 成倍增加:使用 --checkers 4 --builders 4 时,最多可以同时运行 16 个类型检查器。--singleThreaded 强制使用单个线程,适合调试或比较 6 与 7。监视模式在 Parcel 的文件观察器上重建,同样移植到 Go。不再对庞大的 node_modules 文件夹进行昂贵的轮询,文件观察更轻便。可以尝试的命令 安装候选版本: bash npm install -D typescript@rc 检查版本: bash npx tsc --version # 版本 7.0.1-rc 像往常一样编译,只是更快: bash npx tsc 调整类型检查工作者的数量: bash npx tsc --checkers 8 强制使用单个线程以与 6 进行比较: bash npx tsc --singleThreaded 使用别名同时安装 6 和 7: bash npm install -D typescript@npm:@typescript/typescript6 npm install -D typescript-7@npm:typescript@rc 要运行夜间版本: bash npm install -D @typescript/native-preview npx tsgo --version 夜间二进制文件仍称为 tsgo。一旦 7 正式发布,所有内容将移回 typescript 包中。简而言之,TypeScript

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡