Aperçu Natif TypeScript 7 : Project Corsa Réécrit le Compilateur en Go, Et Cela Change Tout

Aperçu Natif TypeScript 7 : Project Corsa Réécrit le Compilateur en Go, Et Cela Change Tout

lschvn12 min de lecture

Le codebase VS Code de Microsoft compile en 7,5 secondes sous l'aperçu natif TypeScript 7, contre 77,8 secondes avec l'actuel compilateur basé sur JavaScript. C'est une amélioration de 10×, et c'est le résultat principal du Project Corsa, la réécriture complète par Microsoft du compilateur TypeScript et du service de langage en Go.

TypeScript 7 change cela. Ou plutôt, il le changera, mais l'aperçu est déjà là et les chiffres sont difficiles à contester.

Project Corsa : Le Port Natif

Début 2025, Microsoft a annoncé Project Corsa, un port natif complet du compilateur TypeScript et du service de langage vers Go. L'objectif était ambitieux : des temps de build environ 10x plus rapides et une réactivité significativement améliorée de l'éditeur.

Les premiers benchmarks étaient frappants. Sur le codebase VS Code lui-même, un grand projet TypeScript réel, la compilation est passée de 77,8 secondes à 7,5 secondes. Sur la suite de tests Playwright, elle est passée de 11,1 secondes à 1,1 seconde. Ce ne sont pas des micro-benchmarks synthétiques. C'est le même codebase que Microsoft utilise pour construire VS Code, fonctionnant sur le même matériel.

Le port n'est pas encore complet. TypeScript 6.0 reste la release basée sur JavaScript à travers laquelle l'écosystème migre. Microsoft a indiqué que TypeScript 6.0 sera la dernière version majeure construite sur la toolchain basée sur JS. TypeScript 7 est là où l'ère native commence véritablement.

Ce Que « Natif » Signifie Vraiment En Pratique

Il y a deux dimensions à ce que TypeScript 7 change, et ça vaut le coup de les séparer.

Le compilateur (tsc), Le compilateur TypeScript en ligne de commande. Un tsc basé sur Go signifie des compilations plus rapides, une utilisation mémoire plus faible pendant les builds et une meilleure intégration avec des toolchains non-JavaScript. Pour les projets qui exécutent tsc dans les pipelines CI, cela se traduit directement en cycles de feedback plus rapides.

Le service de langage, C'est ce qui alimente l'IntelliSense de VS Code, le soulignement des erreurs, la navigation vers les définitions et le refactoring. La performance de l'éditeur est bottlenecked par le service de langage, pas le compilateur. Microsoft rapporte que les temps de chargement de projet ont diminué d'environ 8x dans les premiers tests. Pour tous ceux qui ont attendu 30+ secondes qu'un grand projet TypeScript devienne réactif dans VS Code, ce chiffre compte.

Node.js Type Stripping : Exécuter TypeScript Sans Transpiler

En parallèle du travail sur le compilateur natif, Node.js a été livré avec le support natif TypeScript via une fonctionnalité appelée type stripping. C'est une approche fondamentalement différente pour exécuter TypeScript, au lieu de compiler des fichiers .ts en .js, Node.js peut maintenant exécuter TypeScript directement en strippant les annotations de type avant l'exécution.

Le calendrier a avancé vite :

  • Node.js 22.18.0 (juillet 2025) a activé le type stripping par défaut
  • Les avertissements ont été supprimés dans v24.3.0/22.18.0
  • La fonctionnalité s'est stabilisée dans v25.2.0

La distinction clé est entre syntaxe effaçable (types, interfaces, tout ce qui disparaît à l'exécution) et syntaxe runtime (enums, namespaces, choses qui produisent du vrai JavaScript). Le type stripping fonctionne proprement pour la première. Pour la seconde, l'équipe Node.js a introduit un flag --erasableSyntaxOnly qui enforce cette séparation explicitement.

Cela signifie que vous pouvez maintenant écrire un fichier TypeScript et l'exécuter avec node file.ts, pas d'étape de build, pas de transpilation. Pour les scripts, les CLIs et le prototypage rapide, c'est une amélioration significative du workflow. Pour les builds de production, vous voudrez toujours tsc pour le cross-targeting et la vérification complète des types, mais l'écart entre « je veux essayer quelque chose » et « exécuter du code » se réduit considérablement.

Ce Que Les Développeurs Doivent Faire Maintenant

La transition n'est pas automatique et il y a des étapes concrètes à prendre avant le changement :

Auditez l'utilisation des enums et namespaces. Ce sont les fonctionnalités TypeScript qui n'ont pas d'équivalent effaçable propre. Les enums peuvent être remplacés par des objets as const ; les namespaces peuvent migrer vers des modules ES. Si votre codebase utilise l'un ou l'autre intensivement, commencez la migration maintenant.

Activez --erasableSyntaxOnly dans la CI. Cela signale toute syntaxe TypeScript non-effaçable dans votre codebase, vous donnant une feuille de route de migration claire avant que le type-stripping ne devienne le comportement par défaut.

Ajoutez TypeScript 7 preview aux pipelines CI. Le tag npm @typescript/native-preview vous permet de tester le compilateur basé sur Go contre votre codebase aujourd'hui. Il ne remplacera pas encore votre build de production, mais il révèle les problèmes avant que la migration n'arrive.

Surveillez les changements strict-by-default. TypeScript 6.0 envisage de faire de strict le mode par défaut pour les nouveaux projets. Si vous avezreporté l'activation des vérifications strict, maintenant c'est le moment, ce ne sera plus optionnel longtemps.

Le Tableau Plus Large

Deux forces convergent. La première est la performance du compilateur : un compilateur TypeScript natif résout le plus gros point douloureux de l'expérience développeur quotidienne, lento editor startup et vérification de types lethargargique dans les grandes codebases. La seconde est le support runtime : Node.js exécutant TypeScript nativement supprime le dernier point de friction entre écrire un fichier avec annotations de type et l'exécuter.

Ensemble, ils font passer TypeScript de « un langage qui compile vers JavaScript » vers quelque chose de plus proche d'un langage système de première classe pour l'écosystème JavaScript. Que ce soit une bonne chose dépend de votre perspective, mais la direction est claire et les gains de performance sont réels.

L'ère TypeScript basée sur JavaScript n'est pas encore terminée. Mais TypeScript 7, avec son compilateur basé sur Go et la fonctionnalité de type-stripping Node.js qu'il rend possible, est le début d'un chapitre différent.

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

TypeScript 6.0 Sort : La Dernière Release Basée sur JavaScript Avant la Réécriture Go
runtimes

TypeScript 6.0 Sort : La Dernière Release Basée sur JavaScript Avant la Réécriture Go

Microsoft livre TypeScript 6.0 comme la dernière release construite sur le codebase JavaScript original. Mises à jour des types DOM, inférence améliorée, imports de sous-chemins et un flag de migration préparent le terrain pour le TypeScript 7.0 natif basé sur Go.
Turborepo 2.10.3 Reconnaît nub et aube, Deux Nouveaux Gestionnaires de Paquets Node.js en Rust par Colin McDonnell (Zod) et Jeff Dickey (mise)
tooling

Turborepo 2.10.3 Reconnaît nub et aube, Deux Nouveaux Gestionnaires de Paquets Node.js en Rust par Colin McDonnell (Zod) et Jeff Dickey (mise)

Turborepo [v2.10.3](https://github.com/vercel/turborepo/releases/tag/v2.10.3) est sorti le 2026-07-03 avec un support de première classe pour [nub](https://github.com/nubjs/nub) et [aube](https://github.com/jdx/aube), deux gestionnaires de paquets Node.js écrits en Rust qui ont émergé au printemps et à l'été 2026. nub est écrit par Colin McDonnell (créateur de [Zod](https://github.com/colinhacks/zod), 43k étoiles) et aube par Jeff Dickey (créateur de [mise](https://github.com/jdx/mise)); les deux s'intègrent à Turborepo comme valeurs `packageManager` dans `package.json` et `devEngines.packageManager`. La release apporte aussi un nouveau toggle TUI/logs-streamés, la sélection de tâches au clic dans la liste de tâches TUI, la copie automatique des sélections TUI au presse-papiers à la souris, un flag `--production` sur `turbo prune`, TypeScript 7.0.1-rc comme toolchain de workspace, thin LTO + `codegen-units=1` pour les builds de release, et une longue liste de corrections de perf sur le cache-hashing. Le signal principal: deux des builders les plus respectés du toolchain JS livrent désormais des gestionnaires de paquets qui s'appuient sur Node stock au lieu de le remplacer, et Turborepo est le premier outil de monorepo mainstream à formaliser les deux.
Node.js 26.4.0 'Current' livre le sous-système node:vfs (Matteo Collina), les package maps pour les hooks de loader ESM (Maël Nison), la compression de certificat TLS, TCP_KEEPINTVL/TCP_KEEPCNT, et argon2 stable
runtimes

Node.js 26.4.0 'Current' livre le sous-système node:vfs (Matteo Collina), les package maps pour les hooks de loader ESM (Maël Nison), la compression de certificat TLS, TCP_KEEPINTVL/TCP_KEEPCNT, et argon2 stable

Node.js 26.4.0 (Current), publié le 2026-06-24 par @aduh95, apporte huit changements SEMVER-MINOR : un sous-système node:vfs minimal qui permet de monter des systèmes de fichiers virtuels fournis par l'application (PR #63115, Matteo Collina) ainsi qu'un suivi qui redirige node:fs/promises vers les instances VFS montées (PR #63537), les package maps pour les hooks de loader ESM qui routent les spécificateurs bruts à travers les hooks de loader (PR #62239, Maël Nison), certificateCompression TLS qui câble la compression zlib et zstd de la RFC 8879 à travers la configuration de build OpenSSL (PR #62217, Tim Perry), le support de TCP_KEEPINTVL et TCP_KEEPCNT dans net.Socket.setKeepAlive (PR #63825, Guy Bedford), des buffers fournis par l'appelant dans fs.readFile / fs.readFileSync (PR #63634, Matteo Collina), closeIdleConnections qui ferme désormais aussi les sockets pre-request (PR #63470, semimikoh), net.BlockList promu au statut Release Candidate (PR #63050), et crypto argon2 + KEM encap/decap marqués stable (PR #63924, Filip Skokan). La release ajoute aussi WebCrypto cSHAKE (PR #63988), listEndpoints QUIC (PR #63536) et des handles X509Certificate (PR #63191), dgram connectSync / bindSync (PRs #63838 + #63932, Guy Bedford), net.BoundSocket pour un binding TCP précoce (PR #63951), un chemin expérimental d'appel FFI rapide pour AArch64 et x86_64 (PRs #63068 + #63941, Paolo Insogna), npm 11.17.0 (PR #63857), sqlite 3.53.2 et libffi 3.6.0.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.