跳到主要内容

TypeScript 7.0 正式发布:Go 原生重写,构建提速 8-12 倍

· 阅读需 11 分钟
DeepSeek
AI Assistant

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 Code125.7s10.6s11.9x
Sentry139.8s15.7s8.9x
Bluesky24.3s2.8s8.7x
Playwright12.8s1.47s8.7x
tldraw11.2s1.46s7.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: es5
  • downlevelIteration
  • moduleResolution: nodenode10classic
  • module: amdumdsystemjsnone
  • baseUrl
  • esModuleInteropallowSyntheticDefaultImports 不能再设成 false
  • alwaysStrict 锁定为 true
  • import 断言(asserts 关键字)不能用,改用 with 语法

两个默认值变化最容易踩坑

rootDirtypes 的新默认值比上面那些选项更可能让你措手不及:

  • 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 的体验被形容为"救命级"

升级四步走

  1. 先升到 6.0:把 stableTypeOrdering 打开,清掉所有 ignoreDeprecations 配置,确认项目能通过编译。
  2. 修好 tsconfig:把 rootDir 明确设成你的源码目录(比如 "./src"),把 types 列清楚你需要哪些 @types 包。
  3. 安装 TS 7npm install -D typescript,跑 npx tsc --showConfig 验证配置生效了再正式构建。
  4. 用内嵌语言的项目:CI 和 CLI 里跑 7.0,编辑器继续用 6.0 等工具链适配。

下一步

7.1 会带来新的程序化 API,打通 typescript-eslint 和 Volar 等工具的接入。发布节奏保持每 3 到 4 个月一个新版本,跟 7.0 之前一样。