TypeScript 周刊 #3:Bun 引入内置类型检查器,ts-rust 复刻版性能超越 Go,ttsc 打造编译期 Lint

TypeScript · 周刊 #3

TypeScript 周刊 #3:Bun 引入内置类型检查器,ts-rust 复刻版性能超越 Go,ttsc 打造编译期 Lint

typescriptTypeScript语言周刊编译器运行时

数据源:GitHub Releases + 官方博客 + HN

📦 版本动态

官方稳定版演进与构建管线升级

当前官方最新稳定版本为 TypeScript 7.0.2(发布于 2026 年 8 月 20 日)。在最近 7 天内,官方未发布新的编译器补丁版本。9 月 30 日发布的 vscode-typescript/v1.0.1 编辑器扩展已全量捆绑该版本编译器。站内历史发布详解可参阅:TypeScript 7.0 新特性详解。

在当前的 7.0 系列版本中,最值得掌握的核心机制调整与实际工程影响归纳如下:

变更项规则变化工程实际影响
Go 架构并发检查编译器由 JS 迁移至 Go,提供 --checkers 参数控制工作线程数(默认值为 4)。多核开发机全量构建提速 8 至 12 倍;在资源受限的 CI 容器中需显式设定参数以防多进程抢占内存。
编程 API 暂时缺位7.0 仅分发原生 CLI 二进制文件,暂未暴露供外部调用的 Node.js 编译器 API。依赖内部 AST 上下文的工具(如 typescript-eslint)无法直接接入,需配置 @typescript/typescript6 别名执行双轨构建。
严格模式默认固化默认启用 strict、rootDir: "./";移除 baseUrl 与 moduleResolution: node,终止支持 target: es5。老旧项目在升级时需清理非法配置字段,路径别名需全面切换至 nodenext 或 bundler 规范解析。

平台适配方面,TS 7.0 二进制发行包已覆盖 Linux、macOS 与 Windows 主流架构,但无原生 C++ 绑定亦给 WebAssembly 容器运行提出了全新挑战。

📝 深度条目

Bun 44361 号 PR 引入原生类型检查器 bun check

发生了什么: Jarred Sumner 提交 Bun PR #44361,移植 typescript-go 7.0.2 内核新增原生类型检查器,新增约 15 万行代码。提供 bun check 及联动标志 --check。在 Next.js(2,881 个源码文件)测试中,全量检查 CPU 耗时由 tsc 7.0.2 的 6.9 秒缩短至 2.4 秒,内存峰值由 1.78 GB 降至 0.69 GB。

为什么重要: 以往轻量运行时只擦除类型而不校验。Bun 将类型检查内嵌至单进程,并在内存中完成 Project References 依赖分析。该实现经 72 个主流开源项目(1,103 份配置)与 1.3 万个官方测试用例验证,匹配率达 99.99%,并消除了官方 Go 版本在多线程竞态下报错行号偶发漂移的问题。

对谁有影响: 使用 Bun 编排微服务、全栈框架及本地测试的前端与系统工程师。CI 管道可剔除独立的 Node.js 类型检查容器。

链接:Bun PR #44361: bun check builtin type checker

笔者点评: 单进程内嵌类型检查是运行时的演进方向。其 0.69 GB 的实测内存峰值消除了容器 OOM 隐患。因其不生成 .d.ts 与 SourceMap,跨包类型发布仍须保留官方构建流程。

ts-rust (tsc-rs) 登场:大模型两周重构 Rust 版 TS 7,实测提速 3 倍

发生了什么: Theo Browne 开源 pingdotgg/ts-rust(npm: tsc-rs),基于 TS 7.1-dev commit 673a5f17d713 将官方 Go 编译器移植至 Rust。项目先由 OpenAI 模型耗资 40 万美元 Token 编写 130 万行代码但兼容率停滞于 84%;随后由 Claude Opus 5.5 耗资 2.4 万美元 Token(约 2 周)从零重写完成。在 T3 Code 测试中,tsc-rs 耗时 5.27 秒,比官方 Go 版 tsc 7(16.10 秒)快 3.05 倍,比 tsc 6(62.63 秒)快 11.9 倍。

为什么重要: 该项目通过全部 181,711 个官方转译测试用例,并在 120 个真实开源库上输出完全一致的诊断。它原生内建 Effect 4 诊断规则(代码段 377xxx),免去二次插件配置。无垃圾回收的 Rust 架构为 WebAssembly 零开销运行类型检查器铺平道路。微软 TS 负责人 Dan Rosenwasser 现身 HN 确认关注该进展。

对谁有影响: 关注 WASM 浏览器端类型分析、构建 Rolldown/Rspack 工具链的前端架构师,以及 Effect 生态开发者。

链接:ts-rust: An experimental Rust port of TypeScript 7 compiler

笔者点评: 高参数量模型在机械式语法树转译中效率突出。但自动生成的代码库缺乏人工架构分层,未来官方调整类型推导边界时,可能面临重复高昂 Token 重新生成的维护隐患。

ttsc:基于 typescript-go 架构的编译器内嵌插件与 Lint 引擎

发生了什么: Typia 作者 Samchon 发布工具链 ttsc,配套提供 ttsx 预检运行时与 @ttsc/lint。该项目基于微软 typescript-go 架构构建,恢复了在 TS 7.0 中被剥离的 AST 转换插件扩展能力,允许在同一次类型推导扫描中同步执行代码规范校验。

为什么重要: TS 7 移除 Node.js API 导致依赖编译期宏与类型元数据转换的库(如 Typia、TS-Patch)无法升级。ttsc 直接在编译器检查阶段注入中间件,保留类型反射能力。其搭载的 @ttsc/lint 覆盖 720 余条规则,在 VS Code 规模项目中,校验吞吐量达到传统独立 ESLint 的 900 倍;配套的 @ttsc/graph 还将 AI 代理分析工程时的 Token 消耗缩减了 92%。

对谁有影响: 重度依赖编译期类型安全校验的高并发服务端团队、大型单体仓库维护者,以及希望合并 CI 中 Lint 与 Typecheck 的工程师。

链接:samchon/ttsc: A typescript-go toolchain for compiler plugins

笔者点评: 将 Lint 规则前置合并至类型检查阶段能显著缩短流水线周期。但将格式化与风格校验硬绑定进编译器,要求团队割舍部分高度定制的外部 AST 插件,改造成本需审慎评估。

🔥 社区热议

大模型重写编译器引发 Rust 与 Go 性能基准大论战

10 月 8 日,pingdotgg/ts-rust 项目在 Hacker News 引发深度探讨(117 Points,222 条评论)。

  • 语言极限与无 GC 优势派:支持 Rust 的开发者强调,TypeScript 类型检查涉及深层嵌套的联合类型(Union Types)与复杂的条件类型展开,瞬时产生的海量 AST 节点会触发 Go 垃圾回收器的扫描抖动。在长时间运行的 LSP 守护进程中,Go 版本的内存占用曾从 4.9 GiB 膨胀至 7.4 GiB,而 Rust 版本依靠确定性生命周期与 Arena 内存池稳定控制在 2.9 GiB,同时 Rust 原生支持紧凑的高性能 WASM 编译,是浏览器内 IDE 的理想底层。
  • 工程可维护性与规范缺失派:持审慎立场的工程师指出,TypeScript 缺乏形式化语法规范,当前其标准事实上由官方编译器实现所定义。微软之所以选择 Go,是看中其平直的语法结构能与原 JS/TS 维持逻辑对应关系。大模型花费数万美元生成的数十万行未经人工逐行审计的代码,在面对未文档化的边缘类型 Corner Case 时极易沦为黑盒,长期演进成本将远超机器翻译节省的初期工时。

链接:HN: Port of the TypeScript compiler, checker and lsp to Rust, by LLM

全团队 60 个 PR 全由 AI 编写:类型系统面临“类型膨胀”考验

Reddit r/typescript 热帖《Every PR on my team is written by AI now》(155 Points,118 条评论)中,一位大型 Monorepo 工程师复盘了团队近 60 个合并 PR 全由 AI 代理生成的实践,引发关于研发范式转移的激烈交锋。

  • 工程效能肯定派:支持方指出,在明确的架构约束下,AI 代理配合严格的 Lint 与 CodeRabbit 自动化审查,输出的类型安全度已显著超越初中级开发人员手写代码,大幅压缩了边缘逻辑引发的运行时空指针异常,开发者得以将注意力聚焦于业务领域边界界定。
  • 全局一致性瓦解派:资深架构师指出,AI 代理在缺乏全景上下文跨包检索时,具有在局部就近派生重复数据结构的强倾向。这导致同一工程内出现多个字段细微差异的冗余类型(如针对用户实体生成 3 个相互脱节的 User 定义)。类型系统从表达业务领域的心智模型退化为了局部的应试校验器,长期积累的“类型膨胀”将逐步拖垮构建期类型拓扑分析性能。

链接:Reddit: Every PR on my team is written by AI now

Deno 团队并入 Cloudflare 并在一年后终止独立运行时演进

10 月 9 日,Ryan Dahl 宣布 Deno 团队全员加入 Cloudflare,Deno 独立运行时将在维持一年维护期后正式结束演进,该声明在 r/typescript 社区激起震荡(542 Points,96 条评论)。

  • 商业现实反思派:开发者普遍感叹独立运行时的商业化天花板。Deno 率先开创了开箱即用 TypeScript 支持、原生 URL 模块导入与权限沙箱等革新特性,但受制于传统 npm 生态惯性与云托管资本门槛,难以在独立商业化竞争中战胜云平台巨头。
  • 技术资产肯定派:另一方声音认为,Deno 的历史使命已然达成。其核心技术组件 rusty_v8 与标准 Web API 封装将直接集成进 Cloudflare workerd 全球边缘基础设施,同时其推动现代 TypeScript 规范开箱即用的行业价值已深度渗透各主流运行时。

链接:Reddit: Deno is dead,Deno Blog: Joining Cloudflare

🔭 下周关注

  • TypeScript 7.1 Programmatic API RFC:持续跟进 GitHub 官方仓库针对重新开放编译器 Node.js API 签名的设计讨论,核实新 API 是否需要采用 FFI 跨语言中间层;
  • Bun check 生产环境 Canary 验证:跟踪 Bun PR #44361 合入 main 分支后的打包发布动态,重点观察其在海量 monorepo 持续集成中的实际内存稳定性与报错精准度。