Le nouveau compilateur de TypeScript 7 basé sur Go, tsgo, casse déjà des outils de développement populaires tels qu'ESLint, ts-jest et ts-morph. Les dysfonctionnements persisteront jusqu'à ce que l'API programmatique du compilateur se stabilise dans la prochaine version 7.1, ce qui signifie que les équipes qui dépendent de ces outils devraient suspendre tout projet de mise à niveau.
Ce qui a changé dans TypeScript 7
La version a introduit tsgo, un portage en Go du vérificateur de types que l'équipe TypeScript a nommé de code Project Corsa. En déplaçant le cœur de JavaScript vers Go, le compilateur peut offrir des builds jusqu'à dix fois plus rapides, une annonce qui a attiré les premiers utilisateurs cherchant à gagner de précieuses minutes sur leurs pipelines CI.
Pourquoi les outils échouent
Les outils qui fonctionnent avec TypeScript ne communiquent pas directement avec le vérificateur de types. Ils appellent un ensemble d'API internes qui exposent les informations de type, les diagnostics et le parcours de l'AST. Ces API ont été réécrites pour tsgo et restent en mutation jusqu'à la version 7.1. Le résultat est une cascade de plantages et d'échecs silencieux :
- typescript-eslint – npm refuse de l'installer aux côtés de TypeScript 7 ; forcer l'installation provoque une erreur
TypeErrordans ESLint. - ts-jest – tente d'appeler des méthodes internes qui n'existent plus dans la version Go, ce qui provoque l'interruption de la transformation des fichiers de test.
- ts-morph – s'attend à ce que l'API stable parcoure la structure du code ; avec l'API actuelle, il peut retourner des résultats erronés ou échouer sans avertissement.
- Monorepos – tsgo abandonne certains paramètres de type génériques, entraînant des erreurs de type qui n'apparaissent que dans les grands projets multi-packages.
Tout flux de travail mélangeant le linting, les tests Jest ou l'analyse de code avec TypeScript 7 risque de voir ses builds échouer.
Qui est affecté
- Les équipes front-end qui exécutent ESLint lors de chaque pull request.
- Les services back-end qui s'appuient sur ts-jest pour les tests unitaires.
- Les bibliothèques qui utilisent ts-morph pour la génération de code ou la documentation.
- Les organisations avec des configurations monorepo où l'inférence de type est déjà complexe.
Si votre pipeline CI est passé au rouge après une mise à niveau de TypeScript, le coupable est probablement l'un des éléments cités ci-dessus.
Un chemin de migration sûr jusqu'à la version 7.1
Le moyen le plus simple de conserver les gains de vitesse sans casser les outils est de découpler l'étape de vérification rapide des types du build réel :
- Fixez la version principale de TypeScript à 6.x – cela permet de conserver l'API stable attendue par tous les outils.
- Ajoutez
@typescript/native-previewen tant que dépendance de développement – le package fournit le binaire tsgo pour une vérification rapide des types dans la CI. - Exécutez tsgo avec
--noEmitpour des vérifications rapides – cela valide les types mais ne produit pas de fichiers de sortie. - Utilisez le compilateur classique
tscpour les builds réels –tscproduit toujours du JavaScript et respecte l'API 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview
Mettez à jour vos scripts package.json :
{
"scripts": {
"typecheck:fast": "tsgo --noEmit",
"build": "tsc"
}
}
Avec cette configuration double, vous conservez l'accélération décuplée dans la CI tout en préservant la compatibilité avec ESLint, ts-jest et ts-morph.
Quand vous pouvez passer directement à la version 7.0
Si votre base de code n'invoque que tsc — sans linting, sans Jest, sans ts-morph — alors l'API instable ne vous affecte pas. Dans ce cas de figure précis, vous pouvez passer à TypeScript 7 immédiatement et profiter de l'amélioration des performances sans étapes supplémentaires.
Points de vigilance
- Version 7.1 – l'équipe TypeScript a indiqué que l'API programmatique sera figée dans cette version. Une fois déployée, le pont entre tsgo et les outils existants disparaîtra, permettant une mise à niveau propre.
- Mises à jour des outils – surveillez les nouvelles versions de
typescript-eslint,ts-jestetts-morph. Ils publieront des versions compatibles peu après la sortie de la 7.1. - Configuration CI – n'oubliez pas de remplacer
tsgo --noEmitpar un appeltscclassique une fois que l'API sera stabilisée ; le package preview ne sera plus nécessaire.
À retenir : Jusqu'au verrouillage de l'API en version 7.1, restez sur TypeScript 6.x pour votre compilateur principal, ajoutez @typescript/native-preview pour les vérifications rapides, et continuez à utiliser tsc pour les builds. Cela évite de casser le linting et les tests tout en profitant des gains de performance du nouveau moteur Go.
