LLMs Port TypeScript Compiler to Rust: $420k Cost for High-Perf WASM Compatibility

Original title: Rust Port of TypeScript (Tsc)
78AI Score

A developer used models like GPT-5.6 and Claude Opus 5.5 to fully port the TypeScript compiler, checker, and LSP to Rust (tsc-rs) via iterative goal loops. The project consumed over $420,000 in API tokens, generating 1.3 million lines of code while achieving 100% compatibility in real-world projects. The new tool supports high-performance WASM execution, demonstrating the practical viability of LLMs in complex system-level code refactoring.

Full Report

Contents8 sections

ts-rust(又名 tsc-rs)

我想测试一下 LLM 能否将 TypeScript 编译器、类型检查器和 LSP 移植到 Rust。结果证明,它们可以。

完成这项工作花费了 超过 420,000 美元的 token 费用,但你本可以用大约 20,000 美元搞定(详见下文)。

动机

  • 测试模型能力
  • 打造快速的 TypeScript 类型检查器
  • 构建一个能在 WASM 中高性能运行的 TS 检查器
  • 玩梗

警告

这是一个早期版本。 在我们测试过的所有真实世界项目中,它实现了 100% 兼容性。对于绝大多数应用而言,它应该可以作为直接替换方案使用。请参阅已知问题。

另外值得一提的是:我从未读过这行代码。

安装

请注意,我也不确定这是否真的能正常工作。

SH
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json

过程如何?

我使用了大量 OpenAI 模型来尝试完成这次移植。总计在 GPT-5.6 Sol 和 GPT 6 Astra 上消耗了超过 400,000 美元的 API 定价 token。它们在数月的 /goal 循环中编写了超过 130 万行 Rust 代码,但兼容性始终卡在 84% 左右。

当我看到我的 Claude Code 额度消耗如此之少时,我觉得不妨试试 Opus 5.5。它在 10 小时内就做出了可用的 v0 版本。

我以为它会沿用 Codex 模型编写的代码。我错了。Opus 5.5 从零开始重写。它在十分之一的时间内取得了比 Astra 更远的进展。

我让它继续运行,它确实做到了。总 token 花费为 约 24,047 美元的 API 支出,历时两周。我使用的是自己的 Claude 账户,最终相当于 每周 $200 套餐限额的 925% 到 983%。

虽然昂贵,但考虑到 typescript-go 投入了多少工作量,这还不算太糟。

“Slop Line”(低质量生成线)

以下所有内容均由我的 LLM 撰写,而非我本人。

这到底是什么?

ts-rust 是微软原生 TypeScript 编译器(用 Go 编写)的直接移植版(参见 microsoft/TypeScript,前身为 typescript-go)。它保留了 Go 版本的算法和行为,拥有相同的命令行工具(tsc)、语言服务器和 API。

安装

SH
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json

tsc-rs 接受与 tsc 相同的选项。npm 包名为 tsc-rs,以避免与 typescript 包冲突。每个 发布版本 还包含针对各平台的独立压缩包:即 tsc 二进制文件及其旁边的 lib 文件。

平台:Linux x64(静态链接,支持任意发行版)和 macOS arm64。Windows 和 Linux arm64 目前尚不可用。

要在 VS Code 中使用,请参阅 npm 包 README。

Effect 诊断

tsc-rs 内置了 Effect 语言服务诊断功能(代码 377xxx),因此 Effect 项目无需第二个编译器。这些诊断与 TypeScript 诊断来自相同的检查流程,语言服务器也会显示它们。仅当 tsconfig 中配置了插件时才会运行,这与 @effect/language-service 的行为一致:

JSON
{ "compilerOptions": { "plugins": [{ "name": "@effect/language-service" }] } }

规则、选项以及 @effect-diagnostics 注释均移植自 Effect-TS/tsgo 0.46.1。语言服务的编辑器功能(快速修复、重构、悬停提示、补全)尚未移植。

状态

该移植版本固定于上游的一个特定修订版,即 microsoft/TypeScript 673a5f17d713(2026-09-29,TypeScript 7.1.0-dev;参见 UPSTREAM.md),并与该修订版的 Go 实现进行了对比。若要进行比较,请使用 [email protected],而非 7.0.x 或 @typescript/native-preview。如果此构建版本也显示出差异,则属于上游行为,当移植版本更新到新的固定点时,这种差异就会消失。

  • 结果一致。 TanStack Query core 和 Hono 的检查诊断与 Go 完全相同。所有 181,711 个移植的 Go 测试均通过。在基准测试集上,语言服务器和 API 的回答与 Go 保持一致。
  • 速度更快。 在 60 个开源项目中,类型检查耗时约为 Go 的一半(几何平均)。预览包在 CI 中构建时未启用 PGO 和 BOLT,因此其速度比实测构建版本慢。
  • 真实项目。 在 120 个开源仓库中,命令行输出仅在以下问题以及 Go 自身输出随运行变化的地方与 Go 存在差异。

(注:更多技术实现细节与完整 API 文档请查阅原项目 README)