TypeScript 7 用 Go 重写了,速度比上一代快10倍
TypeScript 官方团队发布了一篇新文章,宣布用 Go 语言重写的 TypeScript v7 现在可以供开发者尝鲜了。
简单来说,这次重写的核心目标就一个:解决大型项目里 TypeScript 越来越慢的问题。
你可能早就感觉到了,当项目变得越来越大,代码保存后要等好几秒,编辑器才能反应过来;有时想跳转到某个类型定义,界面也会卡住。这次重写就是为了告别这些烦人的等待。
TypeScript 的速度瓶颈
TypeScript 在 2012 年由微软发布,它的核心使命就是给 JavaScript 加上“静态类型检查”。简单说,就是让你在写代码时就能发现类型相关的错误,而不是等到运行时才崩溃。
TypeScript 编译器本身最早是用 JavaScript 写的,后来团队用它实现了“自举”——也就是用 TypeScript 来写 TypeScript 编译器。但无论怎么优化,它的底层实现和执行环境始终是 JavaScript(Node.js),这从根本上限制了它的性能。
随着现代前端应用越来越复杂,问题也越来越突出:
编译速度慢:稍微大点的项目,做一次类型检查动不动就要几十秒。
内存占用高:Node.js 是单线程的,处理海量类型信息时力不从心,内存消耗巨大。
编辑器卡顿:基于旧引擎的代码补全、跳转定义等功能,反应越来越迟钝。
为什么选择 Go 语言?
为了解决这些根本性的问题,TypeScript 团队启动了一个代号为 “Project Corsa” 的原生移植计划,并用 Go 语言来完成重写。
选择 Go 语言的理由很明确:
原生性能:Go 代码直接编译成机器码执行,比在 JavaScript 虚拟机里运行快得多。
内存高效:拥有更好的内存管理能力,占用更低。
并发能力强:天生就能方便地利用多核 CPU 进行并行计算,这对分析海量代码非常有利。
根据团队公布的早期测试,在某些大型代码库(比如 VS Code 的代码)上,新的 TypeScript 7 编译速度可以达到 6.0 版本的 10 倍左右。这个提升,足以改变开发体验。
现在能用了吗?怎么用?
答案是:可以用,而且已经相当好用了。
如果你想在编辑器里体验,最快的方法是安装 VS Code 扩展。
在 VS Code 扩展商店里搜索 “TypeScript Native Preview”。
安装后,在编写 TypeScript 文件时,状态栏会出现一个火箭图标,点击它即可切换到新的原生编译服务。
这个预览扩展功能很完整,每天更新,支持代码补全、跳转定义、查找引用、重命名、错误提示等几乎所有核心功能。
如果你想在命令行或构建脚本里使用,也可以通过 npm 安装。
# 安装新编译器
npm install -D @typescript/native-preview
# 使用方式与 tsc 类似
tsgo -b tsconfig.json这个新的 tsgo 命令兼容大部分 tsc 的编译选项。最关键的是,它的类型检查准确性非常高。官方表示,在超过 2 万个测试用例中,新版本的行为与 TypeScript 6.0 的表现几乎一致。
重要变化与迁移提醒
TypeScript 7 是原生版本,自然也会清理一些旧版本中过时的功能。你需要为项目做些调整:
| 变化项 | 说明 | 迁移建议 |
|---|---|---|
| --strict | 此模式现在默认开启 | 检查配置,移除不必要的 strict: true 设置 |
| --target | 默认将指向最新的 ES 标准(如 es2025) | 明确指定你需要的目标版本 |
| --baseUrl | 移除了此选项 | 使用路径映射(paths)来配置模块解析 |
| --moduleResolution node10 | 此旧解析模式被移除 | 改用 bundler 或 nodenext 等现代模式 |
为了帮助你迁移,官方推荐使用社区工具 @andrewbranch/ts5to6 来升级配置。
npx @andrewbranch/ts5to6 --fixBaseUrl tsconfig.json
npx @andrewbranch/ts5to6 --fixRootDir tsconfig.json已知的限制
当然,目前这还是预览版,并非所有功能都已完成。
降级编译:将代码编译为旧版本 JavaScript(降级)目前只支持到 ES2021。
监听模式:--watch 模式的效率可能暂时还不如旧版。
api 不兼容:新的原生版本没有实现旧版的完整编译器 API,这可能会影响一些深度集成 TypeScript 的构建工具或 Lint 工具。
如果你的项目依赖这些尚未完善的功能,可以暂时采用“双包共存”的策略:同时安装 typescript(稳定版)和 @typescript/native-preview(预览版),在需要的时候切换使用。
未来的方向
官方已经明确表示:TypeScript 6.0 将是最后一个基于 JavaScript 实现的主要版本。
6.0 版本会作为一个“过渡版本”,主要任务是逐步废弃那些将在 7.0 中被彻底移除的功能。之后不会有 6.1,只有必要的补丁更新。这意味着,TypeScript 的未来已经完全押注在这次 Go 语言重写的 7.0 版本上了。
总结
TypeScript 用 Go 重写,是近年来整个前端工具链趋势的一个缩影。我们正处在一个“底层工具性能革命”的浪潮中:
babel 被用 Rust 写的 SWC 取代,速度提升数倍。
webpack 面临用 Rust 写的 Rspack、Farm 等新打包器的挑战。
ESLint 和 Prettier 也有了 Oxlint、Biome 等高性能的 Rust 替代品。
这些新工具的目标都一样:用高性能的系统级编程语言(Rust、Go、Zig)来重写那些对性能敏感的 JavaScript 工具,从而让开发者的体验更快、更流畅,能更专注于创造而不是等待。
因此,TypeScript 7 不仅仅是一个更快的编译器,它代表了整个前端工程体系向着更高性能和更佳体验的一次重要迈进。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!