TypeScript 7 终于来了。

这次微软几乎把整个 TypeScript 底层掀了:编译器、类型检查器、代码生成器、语言服务器,全部迁移到 Go 原生代码。
完整构建普遍提速 8 ~ 12 倍,编辑器响应提速超过 10 倍,内存占用继续下降。
不过 Vue 开发者先别急着升级。
目前的 TypeScript 7,Vue 还不能完整使用。
TypeScript 7 到底更新了什么?
TypeScript 7 最大的变化,藏在我们每天使用的 tsc 和编辑器后面。
以前的 TypeScript 编译器,本身也由 TypeScript 编写,最终运行在 JavaScript 环境中。维护方便,生态成熟,但很难充分利用多核 CPU。
TypeScript 7 改成 Go 原生实现后,直接获得了原生代码性能、共享内存和多线程能力。

官方测试中,VS Code 完整类型检查从 125.7 秒降到 10.6 秒 ;Sentry 从 139.8 秒降到 15.7 秒 ;Playwright 从 12.8 秒降到 1.47 秒。
多个大型项目都拿到了接近 10 倍的提升。
安装方式没有变化:
npm install -D typescript@7
然后照常运行:
npx tsc
命令还是那个命令,底层已经完全换了一套。
类型检查开始吃满多核 CPU
这是 TypeScript 7 最重要的新能力之一。
解析文件、类型检查、代码生成、项目构建,现在都可以并行执行 。默认情况下,TypeScript 7 会启动 4 个类型检查工作进程。
机器配置足够高,还可以手动增加:
npx tsc --checkers 8
--checkers 用来控制类型检查进程数量。
在官方测试中,VS Code 使用 --checkers 8 后,构建时间从 10.6 秒 继续降到 7.51 秒 ,相比 TypeScript 6 提升 16.7 倍。
大型 Monorepo 还可以并行构建多个子项目:
npx tsc --build --builders 4
--builders 控制同时运行多少个项目构建器。
需要限制资源,也可以切回单线程:
npx tsc --singleThreaded
不过这里不能无脑拉满。
--checkers 4 --builders 4 最多可能同时运行 16 个类型检查器,速度更快,内存压力也会跟着上去。
全新的原生语言服务器
TypeScript 7 重写的还有语言服务器。
我们平时使用的自动补全、跳转定义、查找引用、类型悬停、内嵌提示、语义高亮、自动导入,背后都依赖它。
在 VS Code 项目中,从打开编辑器到显示第一个类型错误,TypeScript 6 需要约 17.5 秒 ,TypeScript 7 只需要 1.3 秒以内。
新版语言服务器还正式支持了 LSP。
这意味着 TypeScript 不再只围绕 VS Code 的私有协议工作。Visual Studio、WebStorm,以及其他支持语言服务器协议的编辑器,都能更容易接入。
目前 TypeScript 7 已经支持:
-
自动导入
-
查找全部引用
-
可展开悬停提示
-
内嵌提示
-
代码镜头
-
语义高亮
-
导入排序
-
删除未使用导入
-
JSX 标签补全与联动编辑
功能都还在,只是速度快了很多。
官方数据显示,新语言服务器的命令失败次数降低超过 **80%**,崩溃次数降低超过 **60%**。
--watch 模式彻底重写
以前大型项目长期运行:
npx tsc --watch
经常会遇到 CPU 空转、文件监听不稳定、内存长期不回落等问题。
TypeScript 7 重新实现了整个 --watch 模式,底层使用 Parcel watcher 的 Go 移植版本。
新版重点解决三个问题:
跨平台文件监听
空闲 CPU 占用
大型项目资源消耗
开发环境空闲时,CPU 占用会明显降低。
项目长时间没有操作后,TypeScript 7 还会主动释放不再使用的类型检查状态,避免内存达到峰值后一直降不下来。
对于长期运行的开发环境,这个更新非常实用。
内存占用也降了
这次性能提升,没有靠疯狂吃内存换来。

官方公布的测试数据中:
| 项目 | TypeScript 6 |
TypeScript 7 |
变化 |
|---|---|---|---|
VS Code |
5.2GB | 4.2GB | -18% |
Bluesky |
1.8GB | 1.3GB | -26% |
Playwright |
1.0GB | 0.9GB | -11% |
tldraw |
0.6GB | 0.5GB | -15% |
对于大型项目、开发机和 CI 环境,这个变化同样重要。
速度更快,内存还更低。
默认配置大改
TypeScript 7 延续了 TypeScript 6 的新默认行为,一批旧配置开始直接报错。
主要变化包括:
{
"compilerOptions": {
"strict": true,
"module": "esnext",
"noUncheckedSideEffectImports": true,
"types": []
}
}
其中最容易踩坑的是 types。
以前 TypeScript 会自动加载可见的 @types 包,现在默认变成空数组。
项目依赖 Node.js、Jest 等全局类型时,需要手动写出来:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}
rootDir 的默认行为也变了。
很多把 tsconfig.json 放在项目根目录、源码放在 src 的项目,需要显式配置:
{
"compilerOptions": {
"rootDir": "./src"
}
}
同时,下面这些历史配置已经被移除或不再支持:
target: es5
baseUrl
moduleResolution: node / node10
moduleResolution: classic
module: amd / umd / systemjs
downlevelIteration
所以从 TypeScript 5 直接跳到 TypeScript 7,很可能会一次冒出大量配置错误。
更稳妥的升级方式是:
TypeScript 5
↓
TypeScript 6
↓
处理废弃配置
↓
TypeScript 7
类型系统也有变化
TypeScript 7 的重点是原生化,但类型行为也有调整。
模板字符串类型现在会正确处理 Unicode 码点。
以前对 Emoji 进行类型推导时,可能会把一个字符拆成两个 UTF-16 代理项。TypeScript 7 会把完整 Emoji 当成一个单位处理,更符合 for...of 和字符串展开的实际行为。
JavaScript 文件中的 JSDoc 类型检查也收紧了。
一些 Closure 风格的旧写法不再支持,.js 和 .ts 文件的分析规则开始变得更加统一。
但是,Vue 还不能完整使用
看到 10 倍提速 ,Vue 开发者可能已经准备升级了。
先等等。
TypeScript 7.0 目前没有提供稳定的编程 API。
新 API 预计要到 TypeScript 7.1 才会推出,而且和旧 API 可能存在明显差异。
这会直接影响所有把 TypeScript 嵌入自身编译器和语言服务的工具:
Vue / Volar
Svelte
Astro
MDX
Angular 模板类型检查
typescript-eslint
TypeScript 本身并不认识完整的 .vue 文件。
Vue 项目里的模板类型检查、组件 Props 推导、变量补全和代码跳转,主要依赖 Volar。而 Volar 又需要调用 TypeScript 的编程 API。
现在 TypeScript 7 没有稳定 API,Volar 暂时无法完成迁移。
所以"Vue 还不能用",准确来说是:
普通 .ts 文件可能可以编译
.vue 文件的完整语言服务还不能切到 TS 7
模板检查和编辑器体验继续依赖 TS 6
你的 Vue 项目不一定会直接构建失败,但 .vue 文件补全、模板检查、组件类型推导和编辑器体验,还无法完整切到 TypeScript 7。
现阶段强行升级,收益不一定先拿到,兼容问题可能先来了。
TypeScript 6 和 7 可以共存
为了让旧工具继续工作,官方推出了:
@typescript/typescript6
这个包提供 TypeScript 6 API,以及独立的 tsc6 命令。
项目可以同时安装两个版本:
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
最终效果就是:
tsc → TypeScript 7
tsc6 → TypeScript 6
项目构建使用 TypeScript 7,依赖旧 API 的工具继续留在 TypeScript 6。
不过普通 Vue 项目没必要折腾这套组合。
等 Volar 和 TypeScript 7.1 把新 API 打通,会省事很多。
写在最后
TypeScript 7 的核心可以压缩成几行:
Go 原生重写
完整构建提速 8~12 倍
多核并行类型检查
Monorepo 并行构建
全新 LSP 语言服务器
watch 模式彻底重做
内存占用下降
默认配置全面收紧
React、Node.js 和普通 TypeScript 项目,现在可以开始测试。
Vue、Svelte、Astro 用户,暂时继续留在 TypeScript 6。
TypeScript 7 已经进入原生时代,但 Vue 生态还需要再等一等。