tsc-ts da Vercel Labs (TypeScript 7 portado de volta para TS): testei no TypeORM, 2,1x mais rápido que o tsgo, e achei uma diferença na saída
A Vercel Labs anunciou ontem à noite (16/10) o tsc-ts. Testei num projeto real antes de postar e o resultado rende uma discussão de engenharia que vai além do TypeScript: como validar uma ferramenta nova antes de colocar no CI.
Contexto
- O compilador do TypeScript sempre foi escrito em TypeScript. No TypeScript 7 a Microsoft reescreveu em Go (TypeScript-Go, o "tsgo"). Hoje o typescript@latest no npm é o 7.0.2.
- O tsc-ts é o tsgo 7.0.2 portado de volta para TypeScript e compilado para executável nativo com o scriptc (compilador de TS/JS para nativo e WebAssembly).
- É experimento declarado da Vercel Labs, licença Apache 2.0. Instala com npm install -D tsc-ts e roda com npx tsc-ts -p tsconfig.json.
O que a Vercel diz
- Segundo o Chris Tate, da Vercel Labs, o type-check fica de 2 a 4x mais rápido que o do tsgo: VS Code 4,2x, Sentry 4,2x, TypeORM 3x, tRPC 2,8x.
- O README compara cada parte (scanner, parser, binder, resolução de módulos, emit, type checker) com o tsgo no corpus de testes do TypeScript, cerca de 12.500 arquivos, e marca tudo como "match".
- O guia de compatibilidade é honesto: bater nesse corpus "não prova equivalência para todo programa" (tradução livre).
O que eu conferi
- TypeORM (commit fe92394), packages/typeorm: 3.572 arquivos, ~387 mil linhas. Máquina de 8 vCPUs. --noEmit, mediana de 5 execuções. tsc-ts 0.0.2 contra typescript 7.0.2.
- O tsconfig do TypeORM usa moduleResolution: node, que o TS 7 removeu. Então testei com duas configs, iguais para os dois compiladores.
- Config node16: tsgo 1,17 s, tsc-ts 0,55 s. 2,1x, com saída idêntica (1.388 linhas de saída, mesmo hash).
- Mesmo número de checkers: 1,8x com 4 e 1,9x com 8. Com --singleThreaded: 3,39 s contra 2,26 s, 1,5x.
- Config bundler (module preserve): tsc-ts 2,3x mais rápido, mas acusou 10 erros TS6196 ("'yargs' is declared but never used") que o tsgo não acusa. O TypeScript 5.9.3 também não acusa.
O que isso é (e o que não é)
- Fui ver se era problema meu. Bate exatamente com o PR #162, mergeado hoje às 04:34 (horário de Brasília), que diz corrigir "um TS6196 que o tsgo não reporta, para um import type default usado como namespace" (tradução livre). Ou seja, o time já corrigiu no main; o npm (0.0.2) ainda não tem a correção.
- Não é "o tsc-ts é ruim": o projeto tem dez dias de repositório, se declara experimento e corrigiu isso em horas. Também não é "TypeScript ganhou de Go": é uma implementação contra outra.
- Meu número (2,1x) ficou abaixo dos 3x anunciados para o TypeORM. Pode ser máquina, config ou versão; é uma medição, não um veredito.
Onde eu fico
- Mais rápido, confirmei. Idêntico, nem sempre.
- Ferramenta nova no CI (compilador, linter, formatter) se valida com diff, não com cronômetro: rode a antiga e a nova no mesmo commit, compare a saída, e só depois olhe o tempo.
Links:
- Repositório do tsc-ts: vercel-labs/tsc-ts
- Guia de compatibilidade: github.com/vercel-labs/tsc-ts/blob/main/apps/web/…
- PR #162 (a correção): tsc-ts#162
- Post do Chris Tate (anúncio e números por projeto na sequência): x.com
Perguntas:
1) Alguém já trocou o type-check do CI pelo tsgo (TS 7)? Mediram o ganho no projeto de vocês?
2) Quando vocês trocam compilador, linter ou formatter, comparam a saída da ferramenta antiga com a nova, ou só olham se o CI ficou verde?
3) Vocês colocariam no CI uma ferramenta marcada como experimento, mesmo sendo 2x mais rápida?
3 comments
Mentions
TypeScriptのコンパイラをネイティブコードに変換して高速化した実験的ツールっぽい 大規模なプロジェクトのビルド時間を短縮するのに使えそう yug1224 starred vercel-labs/tsc-ts vercel-labs/tsc-ts
TS 7.0.2 のコンパイラ(tsgo)を TypeScript に逆移植し、scriptc でネイティブコードにコンパイルする実験 scanner・parser・checker・emit などは TS のテストコーパスで tsgo と同じ結果になるらしい vercel-labs/tsc-ts
신기하네 타스로 바이너리를 작성하는 세상이 오니 타스 컴파일러를 타스로 짤 수 있네 vercel-labs/tsc-ts
@ctatedev I've quickly checked and the benchmark doesn't seems to be like-for-like. By default, tsc-ts type-checks on up to 16 threads (one per CPU), while tsgo uses 4. I might be wrong, but maybe somebody from the team can explain. github.com/vercel-labs/tsc-ts/blob/f43cb6bc130db3…
tsc-ts: TypeScript written in TypeScript
tsc-ts: TypeScript written in TypeScript
tsc-ts: TypeScript written in TypeScript | Discussion
tsc-ts: TypeScript written in TypeScript comments · posted on 2026.10.17 at 13:10:27 (c=3, p=6)
tsc-ts da Vercel Labs (TypeScript 7 portado de volta para TS): testei no TypeORM, 2,1x mais rápido que o tsgo, e achei uma diferença na saída A Vercel Labs anunciou ontem à noite (16/10) o tsc-ts. Testei num projeto real antes de postar e o resultado rende uma discussão de engenharia que vai além do TypeScript: como validar uma ferramenta nova antes de colocar no CI. Contexto - O compilador do TypeScript sempre foi escrito em TypeScript. No TypeScript 7 a Microsoft reescreveu em Go (TypeScript-Go, o "tsgo"). Hoje o typescript@latest no npm é o 7.0.2. - O tsc-ts é o tsgo 7.0.2 portado de volta para TypeScript e compilado para executável nativo com o scriptc (compilador de TS/JS para nativo e WebAssembly). - É experimento declarado da Vercel Labs, licença Apache 2.0. Instala com npm install -D tsc-ts e roda com npx tsc-ts -p tsconfig.json. O que a Vercel diz - Segundo o Chris Tate, da Vercel Labs, o type-check fica de 2 a 4x mais rápido que o do tsgo: VS Code 4,2x, Sentry 4,2x, TypeORM 3x, tRPC 2,8x. - O README compara cada parte (scanner, parser, binder, resolução de módulos, emit, type checker) com o tsgo no corpus de testes do TypeScript, cerca de 12.500 arquivos, e marca tudo como "match". - O guia de compatibilidade é honesto: bater nesse corpus "não prova equivalência para todo programa" (tradução livre). O que eu conferi - TypeORM (commit fe92394), packages/typeorm: 3.572 arquivos, ~387 mil linhas. Máquina de 8 vCPUs. --noEmit, mediana de 5 execuções. tsc-ts 0.0.2 contra typescript 7.0.2. - O tsconfig do TypeORM usa moduleResolution: node, que o TS 7 removeu. Então testei com duas configs, iguais para os dois compiladores. - Config node16: tsgo 1,17 s, tsc-ts 0,55 s. 2,1x, com saída idêntica (1.388 linhas de saída, mesmo hash). - Mesmo número de checkers: 1,8x com 4 e 1,9x com 8. Com --singleThreaded: 3,39 s contra 2,26 s, 1,5x. - Config bundler (module preserve): tsc-ts 2,3x mais rápido, mas acusou 10 erros TS6196 ("'yargs' is declared but never used") que o tsgo não acusa. O TypeScript 5.9.3 também não acusa. O que isso é (e o que não é) - Fui ver se era problema meu. Bate exatamente com o PR #162, mergeado hoje às 04:34 (horário de Brasília), que diz corrigir "um TS6196 que o tsgo não reporta, para um import type default usado como namespace" (tradução livre). Ou seja, o time já corrigiu no main; o npm (0.0.2) ainda não tem a correção. - Não é "o tsc-ts é ruim": o projeto tem dez dias de repositório, se declara experimento e corrigiu isso em horas. Também não é "TypeScript ganhou de Go": é uma implementação contra outra. - Meu número (2,1x) ficou abaixo dos 3x anunciados para o TypeORM. Pode ser máquina, config ou versão; é uma medição, não um veredito. Onde eu fico - Mais rápido, confirmei. Idêntico, nem sempre. - Ferramenta nova no CI (compilador, linter, formatter) se valida com diff, não com cronômetro: rode a antiga e a nova no mesmo commit, compare a saída, e só depois olhe o tempo. Links: - Repositório do tsc-ts: vercel-labs/tsc-ts - Guia de compatibilidade: github.com/vercel-labs/tsc-ts/blob/main/apps/web/… - PR #162 (a correção): tsc-ts#162 - Post do Chris Tate (anúncio e números por projeto na sequência): x.com Perguntas: 1) Alguém já trocou o type-check do CI pelo tsgo (TS 7)? Mediram o ganho no projeto de vocês? 2) Quando vocês trocam compilador, linter ou formatter, comparam a saída da ferramenta antiga com a nova, ou só olham se o CI ficou verde? 3) Vocês colocariam no CI uma ferramenta marcada como experimento, mesmo sendo 2x mais rápida?
Vercel's TSC-TS is best of the new TypeScript compilers because it still uses TypeScript but compiles it to native code. It is what I hoped Microsoft would do, just make native compiler for subset of TypeScript, that way whole ecosystem benefits. Now we have Vercel's. vercel-labs/tsc-ts