TypeScript 7.0 正式发布:Go 原生重写,构建提速 8-12 倍
2026 年 7 月 8 日,TypeScript 团队发布了 7.0 正式版。编译器的核心引擎用 Go 完全重写,你在真实项目里能感受到的提速是 8 到 12 倍——VS Code 项目的构建从 125.7 秒降到了 10.6 秒。
这篇文章带你过一遍 7.0 的性能改进、有哪些配置需要改动、内嵌语言(Vue/ Angular/ Svelte 等)能不能用,以及怎么在现有项目里升级。
构建从两分钟到十秒:性能数据一览
编译器从 TypeScript 自举实现迁移到了 Go。原生执行、共享内存多线程和 goroutine 调度让全量构建时间不再是瓶颈。以下是几个真实项目的对比数据:
| 项目 | TS 6 构建时间 | TS 7 构建时间 | 提速 |
|---|---|---|---|
| VS Code | 125.7s | 10.6s | 11.9x |
| Sentry | 139.8s | 15.7s | 8.9x |
| Bluesky | 24.3s | 2.8s | 8.7x |
| Playwright | 12.8s | 1.47s | 8.7x |
| tldraw | 11.2s | 1.46s | 7.7x |
内存占用也降了:VS Code 从 5.2 GB 降到 4.2 GB,Bluesky 从 1.8 GB 降到 1.3 GB。编辑器体验的改进更直接——在 VS Code 代码库里打开一个报错的文件,第一个错误提示从 17.5 秒缩短到 1.3 秒以内。
用三个参数控制并行度
TS 7 把解析、类型检查和代码生成都并行化了,你有三个参数可以调:
--checkers:控制类型检查器的工作线程数,默认 4。在 VS Code 项目上设为 8 能进一步把 10.6 秒压到 7.51 秒。设为 1 就退化成单线程,方便排查问题。--builders:控制--build模式下项目引用的并行构建数。和--checkers是乘法关系——--checkers 4 --builders 4最多同时跑 16 个类型检查器。--singleThreaded:完全关掉并行化。调试性能差异或者环境受限时用它。
文件监听器也重写了:--watch 不再慢
7.0 的 --watch 模式换了一套底层实现,从 Parcel 的 C++ 文件监听器移植而来。Go 标准库没有原生文件监听 API,纯轮询的性能又不行,这套移植就是在两个约束之间找到的解法。
用 tsc --watch 的开发者不需要改任何配置,但响应速度会有明显提升。
装好就能用:安装与编辑器支持
npm install -D typescript
装完就能直接用 npx tsc。如果你用 VS Code,装一个官方扩展就行;Visual Studio 会自动按工作区启用 TS 7。想尝鲜夜间构建的话:
npm install -D typescript@next
破坏性变更:升级前你需要知道的事
TS 7 和 TS 6 基本兼容(前提是你的 TS 6 开了 stableTypeOrdering,没设任何 ignoreDeprecations)。但 6.0 里只警告的东西,7.0 里不再编译。
这些选项彻底消失了
target: es5downlevelIterationmoduleResolution: node、node10、classicmodule: amd、umd、systemjs、nonebaseUrlesModuleInterop和allowSyntheticDefaultImports不能再设成falsealwaysStrict锁定为trueimport断言(asserts关键字)不能用,改用with语法
两个默认值变化最容易踩坑
rootDir 和 types 的新默认值比上面那些选项更可能让你措手不及:
rootDir默认从自动推断变成./。以前 TS 自动把源文件所在的目录当作 rootDir,现在你必须自己写,比如"rootDir": "./src"。不写的话类型输出路径可能对不上。types默认从["*"]变成[]。以前所有node_modules/@types/下的包自动可用,现在你得逐个列出。恢复旧行为只需要把types设为["*"]。
模板字面量类型的 Unicode 变了
type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;
type Result = HeadTail<"😀abc">;
// TS 7:["😀", "abc"]
// TS 6:["\ud83d", "\ude00abc"]
TS 7 把 emoji 当作一个整体(码点)处理,不再拆成 UTF-16 代理对。这跟 for...of 和扩展运算符的行为对齐了。如果你在模板字面量类型上做过程度比较深的类型体操,这里要检查一下。
JSDoc 模式收紧
.js 文件的分析现在跟 .ts 更加一致。以前这些 JSDoc 写法还能用,现在不行了:
- 值直接当类型用(需要用
typeof) @enum注释- 单独的
?当类型 @class让函数变构造函数function(string): void这种闭包风格语法
如果你的项目用了 Vue / Svelte / Angular / Astro
TS 7 目前没有暴露稳定的程序化 API——这个要等到 7.1。用到 API 的工具(Volar、typescript-eslint 等)暂时只能用 TS 6:
- Angular:CLI 里可以用 TS 7 查类型,编辑器里保持 TS 6
- Vue / MDX / Astro / Svelte:继续用 6.0
- VS Code 里跑命令 "Disable TypeScript 7 Language Server" 就能回退
微软发了个 @typescript/typescript6 包帮你并排跑两个版本:
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
这样你的脚本和构建工具继续 import 6.0 的 API,命令行用 7.0 的 tsc。
业界已经在用,效果怎么样
TS 7 跑过了数万项测试加上 GitHub 上主流 TypeScript 代码库的模糊测试。几个实际用户的反馈:
- Slack:合并队列等待时间缩短 40%,CI 类型检查从 7.5 分钟降到 1.25 分钟
- Canva:编辑器里看到第一个报错从 58 秒变成 4.8 秒
- Vanta:他们最大的项目之一快了 9 倍
- Microsoft News Services:每月在 CI 排队上省了 400 小时
- PowerBI 工程师:在编辑器里用 TS 7 的体验被形容为"救命级"
升级四步走
- 先升到 6.0:把
stableTypeOrdering打开,清掉所有ignoreDeprecations配置,确认项目能通过编译。 - 修好 tsconfig:把
rootDir明确设成你的源码目录(比如"./src"),把types列清楚你需要哪些@types包。 - 安装 TS 7:
npm install -D typescript,跑npx tsc --showConfig验证配置生效了再正式构建。 - 用内嵌语言的项目:CI 和 CLI 里跑 7.0,编辑器继续用 6.0 等工具链适配。
下一步
7.1 会带来新的程序化 API,打通 typescript-eslint 和 Volar 等工具的接入。发布节奏保持每 3 到 4 个月一个新版本,跟 7.0 之前一样。
