Typescript Go 尝鲜体验指南

2,978 阅读3分钟

大型 Monorepo 中 TS 语言服务(Typescript Language Server)启动慢、跳转慢的问题或许有救了,官方正在使用 Golang 重写 TS Compiler。预期能有 10 倍的速度提升,内存使用也将显著减少!

具体内容可参见官方博文:A 10x Faster TypeScript - TypeScript

当前最新版本为 TypeScript 5.8,5.9 即将推出,原代码库会继续开发 6.x 系列,6.0 版本将有一些弃用和突破性变化。Golang 版本开发完成后将作为 TypeScript 7.0 发布 ,在 7.0 版本足够成熟前,6.x 系列会持续维护。

也许你会好奇为什么选用 Golang 重写,而非前端圈子更流行的 Rust。@RyanCavanaugh 给出了他理由,主要还是基于可移植性、开发周期和兼容性的考量。

虽然项目还处于早期阶段,无法用于生产,但这并不影响我们尝鲜体验,整体还是非常简单的。

仓库地址:GitHub - microsoft/typescript-go

如果你还没有遇到过 TS Server 性能瓶颈,或许可以尝试一下,利用 Project References 在 Monorepo 中跳转源码

环境准备

仓库克隆

git clone --recurse-submodules https://github.com/microsoft/typescript-go.git
cd typescript-go
git submodule update --init --recursive # submodule 初始化

依赖安装

首先安装 Go 1.24 or higher,MacOS 可使用 Homebrew 快速完成:brew install golang

安装完成后,进入项目构建产物

npm install # 安装依赖
npm run build # 构建产物

仓库下会多出一个 built 目录,其中包含所需的 tsgo二进制可执行文件,它会被后续流程使用到。

built
└── local
    ├── lib.d.ts
    ├── ···
    └── tsgo

启动 VS Code

根据 README 提示,复制 .vscode/launch.template.json.vscode/launch.json

copy file

debug console

然后切换到调试面板,选择选择刚刚添加的配置启动,一个新的 VS Code 编辑器将被打开。

注意不要关闭原 typescript-go 项目下的调试进程

typescript-go experience

如上所示,若在 「输出」面板中可以看到 typescript-go,说明启动成功。

整体感受:快!真的很快 视频中的演示项目非常庞大,每天都有无数业务同学因此困扰。在 typescript-go 的加持下,类型加载的等待时间明显降低到了可接受范围内,大部分曾经需要加载若干分钟的文件,现在甚至能够做到秒开。

当然,你也可以把它当成一个常规的编辑器使用,但与 TS 有关的功能,可能存在一些限制。

使用局限

以下是乍一看很容易发现的问题,未被列出的可能还有很多……

  • 智能提示缺失:无法提示变量名、对象属性等

lack of intelligence

  • 不支持 jsx 语法:所有的属性都是 any,有时会报错

do not support jsx syntax

  • 类型识别问题:部分依赖、Project Reference 项目类型识别有误

path resolve problems

可能的用途

虽然 typescript-go 项目自身还有很多问题,但若作为一个代码浏览器,或许是一个不错的选择。

比如代码仓库中部署的在线 VS Code 轻量版(如 Github1s),时常因为性能问题无法跳转

可以预见的是,在不久的将来,大型 Monorepo 的开发体验将会有质的飞跃,一起期待吧!