Il nuovo compilatore basato su Go di TypeScript 7, tsgo, sta già mandando in crash strumenti di sviluppo popolari come ESLint, ts-jest e ts-morph. Questi malfunzionamenti continueranno finché l'API programmatica del compilatore non si stabilizzerà nel prossimo rilascio 7.1; ciò significa che i team che si affidano a questi strumenti dovrebbero sospendere qualsiasi piano di aggiornamento.

Cosa è cambiato in TypeScript 7

Il rilascio ha introdotto tsgo, una versione in Go del type-checker che il team di TypeScript ha denominato Project Corsa. Spostando il core da JavaScript a Go, il compilatore può offrire build fino a dieci volte più veloci, un titolo che ha attirato gli early adopter desiderosi di ridurre i tempi delle pipeline CI.

Perché gli strumenti stanno fallendo

Gli strumenti che lavorano con TypeScript non comunicano direttamente con il type-checker. Chiamano un set di API interne che espongono informazioni sui tipi, diagnostica e traversata dell'AST. Queste API sono state riscritte per tsgo e rimarranno in fase di definizione fino alla versione 7.1. Il risultato è una cascata di crash e fallimenti silenziosi:

  • typescript-eslint – npm rifiuta di installarlo insieme a TypeScript 7; forzare l'installazione causa un TypeError in ESLint.
  • ts-jest – tenta di chiamare metodi interni che non esistono più nella versione Go, causando l'interruzione della trasformazione dei file di test.
  • ts-morph – si aspetta che l'API stabile analizzi la struttura del codice; con l'attuale API potrebbe restituire risultati errati o fallire senza preavviso.
  • Monorepo – tsgo scarta determinati parametri di tipo generici, portando a errori di tipo che compaiono solo in progetti grandi e multi-package.

Qualsiasi workflow che mescoli linting, test con Jest o analisi del codice con TypeScript 7 probabilmente risulterà in build fallite.

Chi è interessato

  • Team front-end che eseguono ESLint come parte di ogni pull request.
  • Servizi back-end che si affidano a ts-jest per i test unitari.
  • Librerie che utilizzano ts-morph per la generazione di codice o la documentazione.
  • Organizzazioni con configurazioni monorepo in cui l'inferenza dei tipi è già complessa.

Se la tua pipeline CI è diventata rossa dopo un aggiornamento di TypeScript, il colpevole è probabilmente uno dei casi sopra elencati.

Un percorso di migrazione sicuro fino alla 7.1

Il modo più semplice per mantenere i vantaggi in termini di velocità senza rompere gli strumenti è disaccoppiare la fase rapida di type-checking dalla build effettiva:

  1. Blocca la versione principale di TypeScript alla 6.x – questo mantiene l'API stabile che tutti gli strumenti si aspettano.
  2. Aggiungi @typescript/native-preview come dev dependency – il pacchetto include il binario tsgo per un type-checking rapido nella CI.
  3. Esegui tsgo con --noEmit per controlli rapidi – valida i tipi ma non produce file di output.
  4. Usa il classico compilatore tsc per le build realitsc produce ancora JavaScript e rispetta l'API 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

Aggiorna i tuoi script in package.json:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

Con questa configurazione duale, manterrai l'incremento di velocità di dieci volte nella CI preservando al contempo la compatibilità con ESLint, ts-jest e ts-morph.

Quando puoi aggiornare direttamente alla 7.0

Se il tuo codebase invoca solo tsc — niente linting, niente Jest, niente ts-morph — allora l'API instabile non ti riguarda. In questo scenario ristretto, puoi passare a TypeScript 7 immediatamente e goderti il miglioramento delle prestazioni senza passaggi aggiuntivi.

Cosa monitorare

  • Versione 7.1 – il team di TypeScript ha segnalato che l'API programmatica sarà congelata in questo rilascio. Una volta rilasciata, il ponte tra tsgo e gli strumenti esistenti scomparirà, consentendo un aggiornamento pulito.
  • Aggiornamenti degli strumenti – tieni d'occhio i nuovi rilasci di typescript-eslint, ts-jest e ts-morph. Pubblicheranno versioni compatibili poco dopo il rilascio della 7.1.
  • Configurazione CI – ricorda di sostituire tsgo --noEmit con una normale chiamata tsc una volta che l'API si sarà stabilizzata; il pacchetto preview non sarà più necessario.

In sintesi: Fino al blocco dell'API nella 7.1, rimani su TypeScript 6.x per il compilatore principale, aggiungi @typescript/native-preview per i controlli rapidi e continua a usare tsc per le build. Questo evita problemi con linting e testing, permettendoti comunque di sfruttare i vantaggi prestazionali del nuovo motore Go.