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
TypeErrorin 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:
- Blocca la versione principale di TypeScript alla 6.x – questo mantiene l'API stabile che tutti gli strumenti si aspettano.
- Aggiungi
@typescript/native-previewcome dev dependency – il pacchetto include il binario tsgo per un type-checking rapido nella CI. - Esegui tsgo con
--noEmitper controlli rapidi – valida i tipi ma non produce file di output. - Usa il classico compilatore
tscper le build reali –tscproduce 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-jestets-morph. Pubblicheranno versioni compatibili poco dopo il rilascio della 7.1. - Configurazione CI – ricorda di sostituire
tsgo --noEmitcon una normale chiamatatscuna 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.
