为什么 Angular、Vue、ESLint 暂时升不上 TypeScript 7.0——以及 TS 7.1 为何改变一切
来源:dev.to — 2026-09-06
📋 概述
TypeScript 7.0 带着全新的原生编译器内核 tsgo 发布,承诺 8–12 倍编译提速;但如果你在 Angular 22、Vue、Svelte 或 ESLint 项目里执行 npm install typescript@^7.0.0,会直接撞上 ERESOLVE 的 peer 依赖锁死。原因是这些框架并不把 TypeScript 当普通转译器用,而是直接钩进它的 Programmatic Compiler API(ts.createProgram、ts.transform、ts.factory)来解析并重写 AST 节点——例如 Angular 的 ngc 会在发出 JS 前把 @Component() 装饰器改写成 ɵɵdefineComponent() 指令。而 TS 7.0 的原生引擎只聚焦 CLI 编译速度,遗漏了面向外部工具的程序化编译器 API,导致所有依赖它的工具在 7.0 上必崩。微软已在推进 7.1(issue #63703),补回稳定 API 让框架共享 tsgo 速度而无需破坏自定义 AST 变换,预计 2026 年秋发布。
🔑 核心要点
- TS 7.0 的 tsgo 原生内核专注 CLI 编译速度(8–12 倍),却遗漏了公开的 Programmatic Compiler API——这正是 Angular ngc、Vue compiler-sfc、svelte-preprocess 与 typescript-eslint 赖以解析并重写 AST 节点的接口,没有它这些工具在 7.0 上必然崩
- 为什么普通项目能升而框架不能:React/Node 等把 TS 当纯转译器(剥掉类型注解输出 .js),升主版本透明无感;框架则要先让编译器把模板里的绑定、事件监听与管道对照到 TS AST 节点再改写,例如把 @Component() 改写为 ɵɵdefineComponent() 指令
- 因此框架维护者故意设了严格的 peer 依赖锁,npm 报 ERESOLVE;别用 --legacy-peer-deps 强行塞 TS 7.0,会造成编译器 transformer 崩溃
- 微软已在 issue #63703 上推进 TS 7.1:补回稳定的程序化编译器 API 并让 Angular、Vue、Svelte、ESLint 在不破坏自定义 AST 变换的前提下用上原生 tsgo 速度
- TS 7.1 落地后无需大规模重写:微软与 Angular 等核心维护者正共同制定 Compiler API 规范,Angular 会把它 backport 进 22.2/22.3 之类的小版本
💡 金句
TS 7.0 承诺 8 到 12 倍的编译速度,但整个前端生态都在等 7.1——因为真正的瓶颈不是 CLI 有多快,而是那个面向工具链的编译器 API 何时回来。
👍 0
👎 0
← 返回 dev.to 首页