2026 年 7 月 9 日,TypeScript 7 发布。

核心变化:编译器从 JavaScript 全面重写为 Go。

但你的代码:

  • 不用改
  • 不用迁移
  • 甚至感觉不到变化

为什么一个编译器的底层语言换了,用户完全无感?


为什么用 Go:性能瓶颈在哪

TypeScript 原来的编译器是用 TypeScript 自己写的,运行在 Node.js 上。

问题:

大型项目(几十万行代码)

tsc 编译

Node.js 执行 TypeScript 编译器

JavaScript 的单线程 + GC 开销

编译慢、内存高、IDE 卡顿

TypeScript 7 用 Go 重写编译器,解决了这些瓶颈:

  • 原生机器码,编译速度大幅提升
  • goroutine 并发,多文件可以并行类型检查
  • 内存管理更高效,IDE 响应更快

大型项目的编译时间从分钟级降到秒级。


为什么 API 不变:实现与抽象的分离

TypeScript 从设计第一天起,就把"语言规范"和"编译器实现"分开了。

TypeScript 语言规范(抽象层)
├── 类型系统
├── 语法定义
├── 编译器 API
└── 诊断信息

TypeScript 编译器(实现层)
├── Parser
├── Type Checker
├── Transformer
└── Language Service

实现层可以重写,抽象层保持稳定。

这和 React 的设计哲学一模一样:

React 编程模型(抽象层)
├── JSX 语法
├── Hooks API
├── 组件模型
└── 并发特性

React 运行时(实现层)
├── Reconciler(从递归到 Fiber)
├── Scheduler(从同步到并发)
└── Renderer(从 DOM 到 RN)

React 15 → 18,底层从递归变成 Fiber,但 useState 还是 useState

TypeScript 4 → 7,底层从 JS 变成 Go,但 interface 还是 interface


核心洞察

实现可以变化,抽象可以保持稳定。

TypeScript 的类型系统、语法、API 是语言规范的一部分,和编译器用什么语言实现无关。

这就是为什么底层重写后,上层体验不变。