TypeScript 6.0 : nouveaux défauts, fonctionnalités et guide de migration

AI Bot
Par AI Bot ·

Chargement du lecteur de synthèse vocale...
TypeScript 6.0 : nouveaux défauts, fonctionnalités et guide de migration

Microsoft a publié TypeScript 6.0 le 23 mars 2026, marquant une étape historique pour le langage. Ce n'est pas une simple mise à jour incrémentale : c'est la dernière version basée sur le compilateur JavaScript avant la réécriture complète en Go prévue avec TypeScript 7.0. Entre les nouveaux défauts de configuration, les fonctionnalités ES2025 et les dépréciations massives, cette version exige l'attention de chaque développeur TypeScript.

Des défauts qui changent la donne

Le changement le plus impactant de TypeScript 6.0 ne concerne pas une nouvelle fonctionnalité, mais les valeurs par défaut de la configuration. Voici ce qui change dans votre tsconfig.json :

OptionAncien défautNouveau défaut
strictfalsetrue
modulecommonjsesnext
targetes5es2025
typestous les @types[] (tableau vide)
rootDirinféré"."

Le mode strict activé par défaut

Fini le temps où il fallait explicitement activer strict: true. Désormais, chaque nouveau projet TypeScript démarre avec toutes les vérifications strictes activées : strictNullChecks, noImplicitAny, strictFunctionTypes et les autres.

Pour les projets existants qui ne sont pas encore en mode strict, vous pouvez temporairement désactiver cette option :

{
  "compilerOptions": {
    "strict": false
  }
}

Le champ types vide par défaut

C'est probablement le changement qui causera le plus de confusion. Auparavant, TypeScript incluait automatiquement tous les paquets @types présents dans node_modules. Désormais, le tableau est vide par défaut. La plupart des projets devront ajouter explicitement :

{
  "compilerOptions": {
    "types": ["node", "jest"]
  }
}

Le rootDir fixé à "."

Au lieu d'inférer rootDir à partir de vos fichiers source, TypeScript 6.0 utilise le répertoire contenant le tsconfig.json. Si vos fichiers source se trouvent dans un sous-dossier, vous devez le spécifier :

{
  "compilerOptions": {
    "rootDir": "./src"
  }
}

Nouvelles fonctionnalités du langage

Inférence améliorée pour les fonctions sans this

TypeScript 6.0 réduit la sensibilité contextuelle pour les fonctions qui n'utilisent pas this. Concrètement, l'inférence des types de paramètres fonctionne désormais indépendamment de l'ordre des propriétés dans les littéraux d'objets :

declare function callIt<T>(obj: {
    produce: (x: number) => T,
    consume: (y: T) => void,
}): void;
 
// Fonctionne maintenant, peu importe l'ordre
callIt({
    consume(y) { return y.toFixed(); },
    produce(x: number) { return x * 2; },
});

Imports de sous-chemins avec #/

Node.js supporte désormais les imports de sous-chemins commençant par #/, et TypeScript 6.0 les comprend nativement. Cela simplifie les alias de chemins sans segments supplémentaires :

{
  "imports": {
    "#/*": "./dist/*"
  }
}

Utilisable avec --moduleResolution nodenext ou bundler.

Support ES2025 et Temporal API

TypeScript 6.0 ajoute le support complet de es2025 comme cible et bibliothèque. Le plus notable : les types Temporal API sont maintenant intégrés, accessibles via --target esnext ou "lib": ["esnext"].

const now = Temporal.Now.plainDateTimeISO();
const meeting = now.add({ hours: 2, minutes: 30 });
console.log(meeting.toString());

L'API Temporal remplace enfin l'objet Date historiquement problématique de JavaScript, avec un support natif des fuseaux horaires, des durées et des calendriers.

Méthodes upsert pour Map et WeakMap

Deux nouvelles méthodes stage-4 ECMAScript arrivent dans la bibliothèque esnext :

const cache = new Map<string, number>();
 
// Retourne la valeur existante ou insère la valeur par défaut
const value = cache.getOrInsert("count", 0);
 
// Version avec fonction de calcul
const computed = cache.getOrInsertComputed("total", (key) =>
    expensiveCalculation(key)
);

Ces méthodes éliminent le pattern classique « vérifier puis insérer » qui était source d'erreurs.

RegExp.escape

La proposition ECMAScript pour l'échappement des expressions régulières a atteint le stage 4. Disponible dans la bibliothèque es2025 :

const userInput = "prix: $50 (USD)";
const escaped = RegExp.escape(userInput);
// "prix\\:\\ \\$50\\ \\(USD\\)"
const regex = new RegExp(escaped);

Consolidation de la bibliothèque DOM

La bibliothèque dom inclut désormais dom.iterable et dom.asynciterable. Plus besoin d'ajouter séparément ces entrées dans votre configuration lib pour itérer sur les collections DOM.

Dépréciations et ruptures de compatibilité

TypeScript 6.0 amorce un grand nettoyage avant la transition vers le compilateur Go. Voici les options dépréciées :

  • target: "es5" — migrez vers es2015 au minimum ou utilisez un compilateur externe
  • --moduleResolution node — remplacé par nodenext ou bundler
  • --module amd, umd, systemjs — abandonné, utilisez ESM
  • --baseUrl — intégrez le préfixe directement dans les entrées paths
  • --outFile — utilisez un bundler externe (webpack, esbuild, Vite)
  • Import assertions (assert) — remplacé par le mot-clé with (import attributes)
  • esModuleInterop: false — l'interopérabilité sécurisée est désormais toujours active

Pour supprimer temporairement les avertissements de dépréciation, ajoutez dans votre configuration :

{
  "compilerOptions": {
    "ignoreDeprecations": "6.0"
  }
}

Attention : cette option est un pont temporaire, pas une solution permanente. Ces fonctionnalités seront supprimées dans TypeScript 7.0.

Commande tsc avec fichiers explicites

Exécuter tsc foo.ts dans un répertoire contenant un tsconfig.json produit désormais une erreur. Utilisez le flag --ignoreConfig pour retrouver l'ancien comportement.

Guide de migration en 5 étapes

Étape 1 : Mettez à jour le champ types

Identifiez les paquets @types que votre projet utilise et listez-les explicitement :

{
  "compilerOptions": {
    "types": ["node", "jest", "react"]
  }
}

Étape 2 : Vérifiez votre rootDir

Si vos fichiers source ne sont pas à la racine du projet, définissez rootDir explicitement :

{
  "compilerOptions": {
    "rootDir": "./src"
  }
}

Étape 3 : Remplacez les options dépréciées

Mettez à jour moduleResolution de node vers nodenext ou bundler. Remplacez les syntaxes assert par with dans vos imports :

// Avant
import data from "./data.json" assert { type: "json" };
 
// Après
import data from "./data.json" with { type: "json" };

Étape 4 : Activez ignoreDeprecations si nécessaire

Si vous ne pouvez pas tout migrer immédiatement :

{
  "compilerOptions": {
    "ignoreDeprecations": "6.0"
  }
}

Étape 5 : Préparez TypeScript 7.0

Activez le flag --stableTypeOrdering pour détecter les incompatibilités avec le futur compilateur Go. Ce flag impose un ordonnancement déterministe des types, identique à celui de TypeScript 7.0, avec un coût de performance d'environ 25 %.

{
  "compilerOptions": {
    "stableTypeOrdering": true
  }
}

La route vers TypeScript 7.0

TypeScript 6.0 n'est pas seulement une mise à jour — c'est un adieu au compilateur JavaScript. Microsoft travaille activement sur une réécriture complète du compilateur en Go, promettant des gains de performance de l'ordre de 10x grâce au code natif et au multi-threading à mémoire partagée.

Le flag --stableTypeOrdering est le premier outil concret pour préparer cette transition. Il garantit que l'ordonnancement des types dans votre code produira des résultats identiques entre les compilateurs JavaScript et Go.

Les premières previews de TypeScript 7.0 sont déjà disponibles via npm et l'extension VS Code. L'équipe TypeScript recommande de les tester dès maintenant sur vos projets pour identifier les incompatibilités potentielles avant que la migration ne devienne obligatoire.

Conclusion

TypeScript 6.0 est une version charnière. Les nouveaux défauts de configuration favorisent les bonnes pratiques dès le départ, les nouvelles fonctionnalités comme Temporal API et les méthodes upsert modernisent le langage, et les dépréciations massives préparent le terrain pour le compilateur Go-natif de TypeScript 7.0.

La migration demande un effort ponctuel — principalement la mise à jour de tsconfig.json — mais le résultat est un projet plus strict, plus moderne et prêt pour l'avenir. N'attendez pas : commencez la migration dès aujourd'hui pour éviter les surprises lors du passage à TypeScript 7.0.


Vous voulez lire plus d'articles de blog? Découvrez notre dernier article sur Notre Processus de Gestion de Projet.

Discutez de votre projet avec nous

Nous sommes ici pour vous aider avec vos besoins en développement Web. Planifiez un appel pour discuter de votre projet et comment nous pouvons vous aider.

Trouvons les meilleures solutions pour vos besoins.