
项目概述
ts-rust(又名 tsc-rs)是将微软原生 TypeScript 编译器(基于 Go 语言版本,即 typescript-go)移植到 Rust 语言的实验性项目。该移植版保留了 Go 版本的算法和行为,提供相同的命令行界面(tsc)、语言服务器协议(LSP)及 API。
在项目测试的所有真实项目中,ts-rust 实现了 100% 的兼容性,可作为绝大多数应用程序的直接替代品。值得注意的是,该项目代码完全由大语言模型(LLM)生成,开发者未阅读任何一行代码。
开发历程与成本
项目初期尝试使用 OpenAI 模型(GPT-5.6 Sol 和 GPT 6 Astra)进行移植。在数月的迭代中,这些模型编写了超过 130 万行 Rust 代码,消耗 API Token 费用超过 40 万美元,但兼容性始终未能突破 84%。
随后,开发者切换至 Claude Code 的 Opus 5.5 模型。该模型在 10 小时内从零开始重写了代码,生成了可用的 v0 版本,进展远超此前尝试。最终,为期两周的 API 总花费约为 24,047 美元。尽管这一数字相当于开发者 Claude 账户周限额的 925% 至 983%,但相较于 TypeScript-Go 的巨大投入,成本仍属可控。
性能基准测试
ts-rust 在多个开源项目中进行了性能基准测试,对比对象包括 tsc 6(JavaScript 编译器)、tsc 7(Go 编译器)以及 Bun 的新增功能 bun check。
T3 Code 完整类型检查
在不启用 Effect 诊断的情况下,bun check 速度最快(4.07秒),tsc-rs 耗时 7.25秒,比 tsc 7(16.10秒)快 2.22 倍,比 tsc 6(62.63秒)快 8.6 倍。
在启用 Effect 诊断的情况下,tsc-rs 内置支持该功能,单次检查耗时 11.13秒,比“tsc 7 + @effect/tsgo”组合(21.07秒)快 1.89 倍,比“tsc 6 + @effect/language-service”组合(138.63秒)快 12.5 倍。
真实应用表现
在 VS Code、Sentry、Playwright 等六个开源应用的测试中,tsc-rs 的几何平均加速比为 tsc 6 的 11.4 倍,tsc 7 的 1.61 倍。bun check 表现最优,几何平均加速比为 tsc 6 的 20.9 倍。
- VS Code:
tsc-rs耗时 4.20秒,比tsc7(6.84秒)更快。 - Sentry:
tsc-rs耗时 4.46秒,比tsc7(7.90秒)更快。 - Playwright:
tsc-rs耗时 0.34秒,比tsc7(0.66秒)更快。
需注意,bun check 在 Sentry 和 tRPC 中报告了其他检查器未发现的错误。此外,tsc-rs 在 VS Code 和 Sentry 中报告的少量错误,与 TypeScript 7.1.0-dev 的行为一致,源于其移植的是包含新检查项的开发版修订。
功能特性
Effect 诊断支持:ts-rust 内置了 Effect 语言服务诊断功能(代码 377xxx),源自与 TypeScript 相同的检查流程。只需在 tsconfig 中配置插件即可运行,无需额外的第二个编译器。目前仅支持诊断,尚未移植快速修复、重构等编辑器功能。
平台支持:当前支持 Linux x64(静态链接)和 macOS arm64。Windows 和 Linux arm64 暂不可用。NPM 包名为 tsc-rs,以避免与官方 typescript 包冲突。
已知问题
- 在某些 monorepo 中,若工作区包源文件可通过
node_modules和直接导入两种方式访问,tsc-rs输出的文件数量可能多于tsc。 - 在使用
tsc -b时,若项目间未建立引用但存在导入关系,tsc-rs可能报告 TS2307 错误,添加引用即可修复。 tsc -b --watch在长时间编辑后可能因内部错误停止(退出码 70)。- 编辑器长时间会话期间,内存占用会逐渐增长。
tsc-rs --version显示的是移植的 TypeScript 版本(7.1.0-dev),而非 NPM 包版本。
安装与使用
由于处于早期版本,安装有效性需用户自行验证。
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json要在 VS Code 中使用,请参阅 NPM 包的 README 文档。对于基准测试,建议使用 typescript@7.1.0-dev.20260929.1 进行对比,而非 7.0.x 或 @typescript/native-preview。
许可证
项目采用 MIT 许可证。移植版保留了原代码的许可证和声明,包括 TypeScript(Apache-2.0)和部分 Go 标准库(BSD-3-Clause)。