TypeScript 7
Go 移植与性能提升
- 主线消息:TypeScript 7 基于 Go 的编译器带来了巨大的类型检查速度提升(通常约 8–12 倍),并降低了内存占用,尤其是在大型代码库中(例如 VS Code、Sentry)。
- 许多人对 HN 上关于
tsc变慢的抱怨少于对rustc的抱怨感到惊讶,尽管在实际使用中tsc往往感觉更糟。 - 有人认为 Rust 可能会比 Go 略快一些,但 Go 移植带来的收益已经“足够好”,而重写为 Rust 会花更长时间,且在结构上更困难(循环数据结构、借用检查器)。
- 也有人强调 Go 的优势在于开发速度快、性能演进稳定,以及更容易从 JS/TS 进行 1:1 迁移。
编译器架构、API 与 WASM
- 这次移植有意做成逐文件、逐 bug 的翻译,而不是重新设计,以尽量保留行为。
- 7.0 中缺乏稳定的编译器 API 是一个很大的痛点;许多工具(框架、ESLint、ts-jest 等)都被迫停留在 TS 6,直到 7.1 及之后的 API 落地。
- 计划支持 WASM 构建,但目前尚未完全明确;不同群体有不同需求:
- 浏览器中的 LSP/Monaco
- 浏览器中的编译器 API
- 面向仅支持 WASM 平台的 CLI 二进制文件
生态影响与工具链
- 有些人已经看到了显著的实际收益(更快的 pre-commit 检查、更灵敏的编辑器),另一些人“只有” 3–4 倍的提速,但仍然很满意。
- Deno 以及各种构建/测试工具等环境需要谨慎地集成 TS7,因为它们以非平凡的方式接入编译器。
- 代码检查/工具链(尤其是 ESLint)仍然是升级的瓶颈。
静态类型之争
- 一个较长的分支重新讨论了静态类型与动态类型:
- 支持 TS:类型对于可维护性、重构、上手、IDE 支持和 AI 代理都至关重要;TS 帮助在 JS 生态中普及了更复杂的类型系统。
- 怀疑/反对 TS:动态语言或渐进式类型语言(Python、Ruby、JS + JSDoc/Zod)再加上测试就已经足够,尤其对小团队、原型或“vibe coding”而言。
- 有人认为早期的静态类型系统(Java/C 风格)很笨拙;而现代系统具备类型推断、联合/求和类型以及模式匹配,这改变了权衡。
- 对于无类型或动态类型方法在大型系统中是否“认真可用”,分歧依然存在。
语言选择与 AI / “Agentic” 时代
- 有些人认为 Go 很适合 AI/agentic 工具;另一些人则认为当代码由机器生成时,强静态类型(例如 TS、Rust)甚至更有价值。
- 丰富的类型级编程(HKTs、复杂类型技巧)与性能预算之间存在张力;更快的编译器会诱使开发者使用更昂贵的类型模式。