TypeScript 7 正式发布:编译快 10 倍,但你的项目现在该升吗?

编程狮(w3cschool.cn) 2026-08-04 17:55:36 浏览数 (24)
反馈

TypeScript 7.0 已经在 2026 年 7 月 8 日正式发布,编译速度比 6.0 快 8 到 12 倍,但默认配置会直接丢弃一批老选项,所以大多数项目现在可以先不急着升,等生态跟上更稳妥。它的内核从 TypeScript 自己写自己,换成了 Go 语言重写,这是速度暴涨的根本原因,也是破坏性变更的来源。

本文基于微软 TypeScript 团队公布的 7.0 发布说明写成,覆盖它快在哪、哪些旧配置会被删除、哪些场景暂时升不了,并给你一份升级决策清单。看完你不仅能判断自己的项目要不要升,还能看懂为什么升完之后某些东西会突然报错。今天这篇文章,编程狮就把 TypeScript 7 这件事一次讲透。

一、先给结论:大多数项目可以先按兵不动

如果你只用 TypeScript 写业务代码,没用到那些被移除的旧配置,升到 7.0 几乎是「无痛」的——编译更快、类型检查更稳,代码一行都不用改。

需要谨慎的有三类人:tsconfig 里还在用 target: es5moduleResolution: node 这类老选项的;项目依赖 TypeScript 程序化 API 做自定义构建或 ESLint 插件的;用 Vue、Svelte、Astro、MDX 这类「模板里嵌 TS」框架的。这三类在 7.0 上都会有坑,后面逐条说。

一句话建议:个人练习项目现在就能尝鲜;公司核心业务等兼容版本发完再动。如果你还没系统学过 TypeScript 的类型系统,可以先过一遍 TypeScript 教程 把基础打牢。

二、TypeScript 7.0 到底快在哪

快的根源只有一个词:重写。过去的 TypeScript 编译器也是用 TypeScript 写的,跑在 Node.js 上,中间隔着一层 JS 解释器。7.0 把整个编译器用 Go 重新实现,编译时直接跑原生机器码,不再经过 JS 运行时那层开销。

官方给出的数字是:在大型代码库上,7.0 比 6.0 快 8 到 12 倍。项目越小提速越不明显,体感明显的是那种「改一行要等十几秒才出报错」的大仓。

维度 TypeScript 6.0 TypeScript 7.0
实现语言 TypeScript(跑在 Node.js) Go(原生编译)
大型项目编译速度 基准 1x 8x ~ 12x
程序化 API 随版本发布 7.0 暂未发布,预计 7.1
最低编译目标 es3 / es5 已移除 es5

提速很实在:保存后的类型检查等待变短,编辑器报错刷新更快,CI 里 tsc --noEmit 的耗时大幅下降。

💡 小提示:速度提升来自编译器内核,跟你写了多少类型体操关系不大。本身几秒就能编完的小项目,升级后体感有限。

三、升级前必须知道的破坏性变更

7.0 顺手删掉了一批官方认定「该退休」的旧配置,用到下面任何一项都会直接报错或静默改变行为。

第一,es5 编译目标被移除。 最低支持目标往上抬,老项目里的 target: "es5" 需改成 es2015 或更高。仍在兼容老浏览器的项目要重点评估。

第二,moduleResolutionnodeclassic 被删除。 现代项目早已迁移到 bundlernode16nodenext。改用 node16nodenext 通常能直接跑,但语义略有差异,需回归测试。

第三,moduleamdumdsystemjsnone 被移除。 走打包器的项目用 esnext 不受影响;直接用 tsc 输出 AMD/UMD 模块的,需要先换构建方案。

第四,baseUrl 被移除。 过去常用它配绝对路径别名。7.0 推荐改用 paths 或相对导入,把 baseUrl: "." 删掉,别名全部收进 paths

第五,esModuleInteropalwaysStrict 不再允许关闭。 这两个在 7.0 强制为 true。以前设成 false 迁就老代码的项目,升级后可能冒出一批新类型报错。TypeScript 是 JavaScript 的强类型超集,这一改动让默认行为更贴近 JavaScript 教程 里讲到的 ES 模块规范。

升级前用 tsc --showConfig 看合并后的配置,再对照上面清单逐条核对。多数脚手架生成的新项目本身不碰这些老选项,它们升 7.0 反而最省心。下面这种写法在 7.0 会直接报错:

// ❌ 升级前:这些选项在 7.0 会报错
{
  "compilerOptions": {
    "target": "es5",
    "moduleResolution": "node",
    "baseUrl": "."
  }
}
// ✅ 升级后写法
{
  "compilerOptions": {
    "target": "es2015",
    "moduleResolution": "nodenext",
    "paths": { "@/*": ["./src/*"] }
  }
}

⚠️ 注意:这些变更是「硬删除」,不是「默认值改了」。删掉的选项写了就报错,不会悄悄兜底。升级前务必用 git diff 把 tsconfig 改动单独审一遍。

四、哪些场景现在暂时不能升

即便 tsconfig 干净,也有两三类场景建议再等等。

场景一:依赖 TypeScript 程序化 API 的工具。 自定义构建脚本、代码生成器、部分 ESLint 插件都通过 require("typescript") 调编译器 API。7.0 没随包发布程序化 API,官方计划 7.1 才补齐。工具链大量依赖它的项目现在升会直接断。临时方案是装 @typescript/typescript6 兼容包,让工具继续用 6.x 的 API,主项目用 7.0 编译器——两条线并存,等 7.1 再统一。

场景二:Vue、Svelte、Astro、MDX 这类「模板里嵌 TS」的框架。 单文件组件和 MDX 里的类型检查,依赖 TypeScript 的嵌入式语言服务能力。7.0 重写内核后,这部分针对框架模板的检查还没完全跟上,相关插件需先发兼容版本。框架官方宣布支持前,强升 7.0 可能让模板内的报错消失或失真。

场景三:绑定特定 Node 版本或 CI 镜像的团队。 7.0 换了 Go 运行时,锁死基础镜像的 CI 需先验证新包能装进去,再批量推广。

💡 小提示:判断自己属不属于「暂时不能升」,最快是看框架和构建工具官网有没有发 7.0 兼容公告。发了就能动,没发就等。

五、给你一份升级决策清单

把前面的内容压成一张表,照着对号入座即可:

你的项目情况 建议
新脚手架项目,tsconfig 无老选项 立刻升,几乎零成本
老项目但只改过 target/module 到现代值 清完残留老选项后升
用到 es5/baseUrl/moduleResolution: node 先迁移配置再升
依赖 typescript 程序化 API 装 @typescript/typescript6 过渡,等 7.1
Vue/Svelte/Astro/MDX 模板项目 等框架发兼容公告再升
公司核心业务、CI 锁死镜像 灰度一台,跑通再推广

升级核心命令就两条,用法见 Node.js 教程

# 升级 TypeScript 到 7.0
npm install -D typescript@7


# 升级后做一次全量类型检查
npx tsc --noEmit

执行顺序:先升级,再用 npx tsc --showConfig 核对合并配置、对照第三节清掉被删选项,最后跑 npx tsc --noEmit 做全量类型检查并修掉新报错,通过后再提交 tsconfig 和 lock 文件改动。

⚠️ 注意:skipLibCheck 没开的项目,第三方类型包在更严格的 7.0 下可能突然报错。这类报错多在 .d.ts 里、与业务代码无关,先开 skipLibCheck 绕过,再单独排期处理。

总结

回到开头的结论:TypeScript 7.0 用 Go 重写换来了 8 到 12 倍的编译提速,但代价是删掉一批老配置、暂未发布程序化 API、框架模板检查还需等待。

你需要带走的三个要点:

  • 纯业务项目放心升,配置干净的话几乎零改动就能享受提速;
  • 老选项要清场es5baseUrlmoduleResolution: node 这类写了就报错;
  • 生态依赖型项目等一等,尤其用到 TS API 或框架内嵌模板检查的场景。

下一步该学什么?如果你还在用 6.0 或更早版本,建议先吃透 tsconfig 常用字段的含义,升级时才能一眼看出哪行配置踩了雷。

延伸学习

想把 TypeScript 与现代前端工程这块系统补齐,可以按这个顺序来:

  1. 先过一遍 前端开发:零基础入门到项目实战,把 TS 在真实项目里的位置摸清楚;
  2. 语法和类型记不住时,JavaScript 速查手册 可以直接搭在旁边翻,TS 的很多语法都建立在 JS 之上。

常见问题

Q:TypeScript 7.0 和 TypeScript 7 是一个东西吗? A:是一个东西。发布版本号写作 7.0,口语里常简称 TS 7 或 TypeScript 7。程序化 API 要等到 7.1 才发布。

Q:升级后编辑器里的类型报错变多了,正常吗? A:部分正常。主要是 esModuleInteropalwaysStrict 在 7.0 强制开启,老代码里不规范的导入写法会被更严格检查。先开 skipLibCheck 排除第三方类型包干扰,再逐个修自己的代码。

Q:我的项目用的是 Vue 单文件组件,现在能升吗? A:建议等 Vue 官方工具链发 7.0 兼容公告。框架模板的类型检查能力跟上之前,强升可能让 SFC 内的报错失真,反而更难排查。

Q:程序化 API 要等到 7.1,我现在非用不可怎么办? A:临时安装 @typescript/typescript6 兼容包,让依赖 API 的脚本继续用 6.x 接口,主项目用 7.0 编译器。两条线并存到 7.1 发布后再统一。

0 人点赞