TypeScript 7 è il compilatore TypeScript riscritto in Go e distribuito come programma nativo. Il linguaggio è lo stesso, il comando è ancora tsc e il pacchetto npm è ancora typescript; ciò che cambia è la velocità (build complete circa dieci volte più rapide), una serie di nuovi valori predefiniti e la rimozione delle opzioni che TypeScript 6 aveva deprecato. TypeScript 7.0 è uscito l'8 luglio 2026, e la versione su npm è la 7.0.2.
npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2
Una delle poche differenze visibili a livello di tipi è il modo in cui i template literal types dividono le stringhe. JavaScript memorizza le stringhe come unità di codice UTF-16, e un'emoji come 😀 ne occupa due:
TypeScript 6 divideva i template literal types per unità di codice, come text[0]. TypeScript 7 li divide per code point, come [...text], quindi l'emoji resta intera:
type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;
type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]
Perché TypeScript è stato riscritto in Go
Fino alla versione 6, il compilatore TypeScript era scritto a sua volta in TypeScript e girava su Node.js. Sulle codebase grandi questo significava build lente, avvio lento dell'editor e un elevato uso di memoria.
Anders Hejlsberg ha annunciato il port nativo l'11 marzo 2025, in un post intitolato "A 10x Faster TypeScript". La nuova codebase aveva il nome in codice Corsa, e quella JavaScript Strada. Il team ha portato il codice del compilatore esistente invece di riprogettare il type checker, quindi il nuovo compilatore segue le stesse regole e segnala gli stessi errori. TypeScript 6.0 (marzo 2026) è stata l'ultima versione della codebase JavaScript e ha fatto da ponte: ha deprecato tutto ciò che TypeScript 7 avrebbe rimosso. TypeScript 7.0 è arrivato l'8 luglio 2026.
Quanto è più veloce TypeScript 7
Build complete di progetti open source, come pubblicate con la versione 7.0:
| Progetto | TypeScript 6 | TypeScript 7 | Accelerazione | Memoria |
|---|---|---|---|---|
| VS Code | 125.7 s | 10.6 s | 11.9x | da 5.2 GB a 4.2 GB |
| Sentry | 139.8 s | 15.7 s | 8.9x | da 4.9 GB a 4.6 GB |
| Bluesky | 24.3 s | 2.8 s | 8.7x | da 1.8 GB a 1.3 GB |
| Playwright | 12.8 s | 1.47 s | 8.7x | da 1.0 GB a 0.9 GB |
| tldraw | 11.2 s | 1.46 s | 7.7x | da 0.6 GB a 0.5 GB |
Quelle esecuzioni usavano il valore predefinito di 4 worker per il controllo dei tipi. Con --checkers 8 sulla stessa macchina, la build di VS Code ha richiesto 7.51 s (16.7x) e quella di tldraw 1.06 s (10.6x), al prezzo di più memoria.
L'editor guadagna altrettanto. Il language service ora gira come language server nativo: nella codebase di VS Code, il tempo tra l'apertura dell'editor e la comparsa del primo errore in un file è passato da circa 17.5 secondi a meno di 1.3 secondi. L'accelerazione conta soprattutto per monorepo, pipeline di CI ed editor su codebase grandi.
Cosa resta uguale
- Il comando e il pacchetto.
npm install --save-dev typescriptenpx tsc. All'installazione, npm sceglie un binario precompilato per la tua piattaforma tra le dipendenze opzionali come@typescript/typescript-linux-x64, quindi non c'è nient'altro da configurare. - Il linguaggio. La stessa sintassi, lo stesso sistema di tipi, gli stessi codici di errore.
- I risultati. Le note di rilascio affermano che praticamente qualsiasi codice che compila senza errori con TypeScript 6.0, con il flag
stableTypeOrderingattivo e senza alcuna impostazioneignoreDeprecations, dovrebbe compilare in modo identico in TypeScript 7.0.
Nuovi valori predefiniti
TypeScript 6.0 ha cambiato questi valori predefiniti e TypeScript 7 li mantiene. Contano solo per le opzioni che il tuo tsconfig.json non imposta:
| Opzione | Nuovo valore predefinito | Effetto se contavi su quello vecchio |
|---|---|---|
strict | true | I progetti che non hanno mai impostato strict ora ricevono i controlli strict su null, noImplicitAny e il resto |
target | es2025, la versione più recente prima di esnext | L'output mantiene la sintassi moderna, a meno che tu non imposti un target più vecchio |
module | esnext | Output come moduli ES, a meno che tu non imposti nodenext o commonjs |
types | [] | I pacchetti @types installati non vengono più caricati in automatico: aggiungi "types": ["node"] (["*"] ripristina il vecchio comportamento) |
rootDir | ./, la cartella che contiene tsconfig.json | Con outDir impostato e i sorgenti in src, error TS5011 finché non imposti "rootDir": "./src" |
noUncheckedSideEffectImports | true | Un import con effetti collaterali come import "./styles.css" richiede una dichiarazione di modulo (declare module "*.css";), che di solito forniscono i pacchetti di tipi dei framework |
stableTypeOrdering | Sempre attivo, non si può disattivare | I tipi vengono ordinati allo stesso modo a ogni esecuzione, quindi i messaggi di errore e l'output .d.ts non dipendono dall'ordine dei controlli |
Opzioni e sintassi rimosse
Le opzioni deprecate in TypeScript 6 sono errori in TypeScript 7:
target: es5, edownlevelIteration, che esisteva solo per l'output ES5.moduleResolution: node(detto anchenode10) eclassic. Usanodenextobundler.module: amd,umd,systemenone.baseUrl(scrivipathsrelativi al file tsconfig) eoutFile(usa un bundler).esModuleInterop: false,allowSyntheticDefaultImports: falseealwaysStrict: false; sono tutte e tre sempre attive.
Il compilatore dice esattamente cosa rimuovere:
error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.
Anche due vecchie forme di sintassi sono errori: module Foo { } per un namespace (scrivi namespace Foo { }; declare module "foo" per un pacchetto non è interessato) e le import assertion (assert { type: "json" } diventa with { type: "json" }).
index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.
Cambiare module in namespace alla riga 2 risolve il problema, e il programma stampa 4.
Dalla riga di comando, tsc file.ts in una cartella che contiene un tsconfig.json ora si ferma con error TS5112 invece di ignorare in silenzio la configurazione. Esegui tsc da solo, oppure passa --ignoreConfig. Nei file JavaScript controllati con JSDoc, TypeScript 7 legge i tipi in modo più simile a TypeScript: @enum non è più riconosciuto, e un valore usato come tipo richiede typeof. La pagina su tsconfig mostra cosa usare al posto di ogni opzione rimossa.
Strumenti che richiedono ancora TypeScript 6
TypeScript 7.0 non include un'API JavaScript stabile. require("typescript") restituisce solo le informazioni sulla versione (version e versionMajorMinor), e le funzioni del compilatore che usano gli altri strumenti (createProgram, il language service) non ci sono; gli entry point typescript/unstable/* del pacchetto sono sperimentali e non le sostituiscono. Le note di rilascio dicono che il team prevede che TypeScript 7.1 porti una nuova API, diversa dalla precedente. Fino ad allora, tutto ciò che importa il compilatore come libreria continua a usare TypeScript 6:
- typescript-eslint (regole di lint basate sui tipi)
- Gli strumenti di linguaggio per i file Vue, Svelte e Astro, il controllo dei tipi dei template di Angular e MDX
- ts-node, che si blocca all'avvio con TypeScript 7 installato
Per questi casi, TypeScript fornisce un pacchetto di compatibilità, @typescript/typescript6, che installa TypeScript 6 con la sua API completa e un comando tsc6. Con gli alias di npm, un progetto può averli entrambi: TypeScript 7 si occupa delle build, e gli strumenti che importano typescript ricevono la versione 6.
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
Dopo npm install:
$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3
Se non usi nessuno di questi strumenti, installa il semplice typescript e salta questa parte.
Nuove opzioni da riga di comando
Il compilatore nativo analizza, controlla ed emette il codice in parallelo. Tre nuovi flag lo controllano, e le note di rilascio definiscono --checkers e --builders sperimentali:
| Flag | Cosa fa |
|---|---|
--checkers N | Numero di worker per il controllo dei tipi per progetto (predefinito 4). Aumentarlo può aiutare su macchine con molti core e costa memoria; diminuirlo è adatto ai runner di CI piccoli. |
--builders N | Numero di progetti costruiti contemporaneamente in un --build di project references. Si moltiplica con --checkers: 4 builder con 4 checker possono eseguire 16 checker insieme. |
--singleThreaded | Disattiva ogni parallelismo, per il debug o con limiti di memoria stretti. |
Anche --watch è stato riscritto, su un port in Go del file watcher del bundler Parcel.
Supporto negli editor
Per VS Code, il team di TypeScript pubblica un'estensione dedicata a TypeScript 7; una volta installata diventa quella predefinita, e il comando "Disable TypeScript 7 Language Server" della palette dei comandi torna a TypeScript 6. L'ultima versione di Visual Studio attiva TypeScript 7 automaticamente in base al workspace, e gli altri editor (Neovim, Zed, Sublime Text, Emacs) vi si collegano tramite il Language Server Protocol. I progetti che usano file Vue, Svelte, Astro o MDX, o template Angular, mantengono il supporto dell'editor basato su TypeScript 6 finché TypeScript 7 non esporrà un'API utilizzabile da quegli strumenti. Un progetto Angular può comunque usare il tsc di TypeScript 7 per controlli rapidi dell'intero progetto.
Come aggiornare a TypeScript 7
- Aggiorna prima a TypeScript 6, se sei su 5.x:
npm install --save-dev typescript@6. Correggi ogni errore di deprecazione che segnala invece di silenziarlo con"ignoreDeprecations": "6.0". - Attiva
"stableTypeOrdering": truecon TypeScript 6 e correggi tutto ciò che cambia. È la configurazione che secondo il team compila in modo identico nella 7. - Imposta le opzioni il cui valore predefinito è cambiato se dipendevi dai vecchi valori, per esempio
"types": ["node"]e"rootDir": "./src". - Installa TypeScript 7:
npm install --save-dev typescript@latest. Poi, se vuoi, rimuovistableTypeOrdering: nella 7 è sempre attivo. - Controlla i tuoi strumenti. Se usi typescript-eslint, ts-node o un framework con controllo dei tipi nei template, configura l'alias di TypeScript 6 mostrato sopra.
- Verifica la versione con
npx tsc --version, e assicurati che la CI installi dal lockfile aggiornato.
tsgo e le build di anteprima
Prima del rilascio, il compilatore nativo era pubblicato come @typescript/native-preview, il cui comando era tsgo, così da poterlo provare accanto al tsc JavaScript. Gli articoli del 2025 e dell'inizio del 2026 parlano di tsgo. Con la 7.0 quel nome è sparito dall'uso quotidiano: il compilatore nativo è tsc, e le sue build nightly sono pubblicate come typescript@next (oggi versioni di sviluppo della 7.1).
Domande frequenti
Cos'è TypeScript 7?
TypeScript 7 è la prima versione del compilatore TypeScript riscritto in Go e compilato come programma nativo, invece di girare come JavaScript su Node.js. Controlla lo stesso linguaggio con lo stesso comando tsc, e le note di rilascio riportano build complete in genere da 8 a 12 volte più veloci rispetto a TypeScript 6. È uscito l'8 luglio 2026.
TypeScript 7 è scritto in Go?
Sì. Il compilatore e il language service sono stati portati da TypeScript a Go (il progetto aveva il nome in codice Corsa, e la codebase JavaScript Strada). Lo installi sempre da npm come pacchetto typescript; npm sceglie un binario nativo precompilato per il tuo sistema operativo e la tua CPU.
Devo modificare il mio codice per TypeScript 7?
Di solito non il codice, a volte la configurazione. TypeScript 7 rimuove le opzioni che la 6.0 aveva deprecato (target: es5, moduleResolution: node, baseUrl, outFile e altre) e cambia valori predefiniti come strict: true e types: []. Il codice che compila senza errori con TypeScript 6.0, con stableTypeOrdering attivo e senza ignoreDeprecations, dovrebbe compilare in modo identico.
Cos'è tsgo?
tsgo era il nome del comando delle build di anteprima del compilatore nativo, pubblicate come pacchetto npm @typescript/native-preview prima della versione 7.0. In TypeScript 7 il compilatore nativo è semplicemente tsc nel pacchetto typescript, e le build nightly arrivano da typescript@next.
typescript-eslint funziona con TypeScript 7?
Non direttamente. TypeScript 7.0 non include un'API JavaScript stabile, e strumenti come typescript-eslint, ts-node e i checker dei template di Vue, Svelte e Angular usano quell'API. Tieni TypeScript 6 installato per loro tramite il pacchetto @typescript/typescript6 (un alias npm), e usa il tsc di TypeScript 7 per le build. Il team di TypeScript prevede che TypeScript 7.1 porti una nuova API, diversa dalla precedente.