TypeScript 7 正式发布!Vue 暂被 “拒之门外“ !!!

TypeScript 7终于来了。

这次微软几乎把整个TypeScript底层掀了:编译器、类型检查器、代码生成器、语言服务器,全部迁移到Go 原生代码

完整构建普遍提速 8 ~ 12 倍,编辑器响应提速超过 10 倍,内存占用继续下降。

不过Vue开发者先别急着升级。

目前的TypeScript 7Vue 还不能完整使用。

TypeScript 7 到底更新了什么?

TypeScript 7最大的变化,藏在我们每天使用的tsc和编辑器后面。

以前的TypeScript编译器,本身也由TypeScript编写,最终运行在JavaScript环境中。维护方便,生态成熟,但很难充分利用多核CPU

TypeScript 7改成Go 原生实现后,直接获得了原生代码性能、共享内存和多线程能力。

官方测试中,VS Code完整类型检查从125.7 秒降到 10.6 秒Sentry139.8 秒降到 15.7 秒Playwright12.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 StudioWebStorm,以及其他支持语言服务器协议的编辑器,都能更容易接入。

目前TypeScript 7已经支持:

  • 自动导入

  • 查找全部引用

  • 可展开悬停提示

  • 内嵌提示

  • 代码镜头

  • 语义高亮

  • 导入排序

  • 删除未使用导入

  • JSX 标签补全与联动编辑

功能都还在,只是速度快了很多。

官方数据显示,新语言服务器的命令失败次数降低超过 **80%**,崩溃次数降低超过 **60%**。

--watch模式彻底重写

以前大型项目长期运行:

npx tsc --watch

经常会遇到CPU空转、文件监听不稳定、内存长期不回落等问题。

TypeScript 7重新实现了整个--watch模式,底层使用Parcel watcherGo移植版本。

新版重点解决三个问题:

跨平台文件监听 空闲 CPU 占用 大型项目资源消耗

开发环境空闲时,CPU 占用会明显降低

项目长时间没有操作后,TypeScript 7还会主动释放不再使用的类型检查状态,避免内存达到峰值后一直降不下来。

对于长期运行的开发环境,这个更新非常实用。

内存占用也降了

这次性能提升,没有靠疯狂吃内存换来。

官方公布的测试数据中:

项目

TypeScript 6TypeScript 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.jsJest等全局类型时,需要手动写出来:

{ "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项目没必要折腾这套组合。

VolarTypeScript 7.1把新 API 打通,会省事很多。

写在最后

TypeScript 7的核心可以压缩成几行:

Go 原生重写 完整构建提速 8~12 倍 多核并行类型检查 Monorepo 并行构建 全新 LSP 语言服务器 watch 模式彻底重做 内存占用下降 默认配置全面收紧

ReactNode.js和普通TypeScript项目,现在可以开始测试。

VueSvelteAstro用户,暂时继续留在TypeScript 6

TypeScript 7 已经进入原生时代,但 Vue 生态还需要再等一等。