TypeScript 6.0 : la dernière release JavaScript avant le compilateur natif en Go

TypeScript 6.0 : la dernière release JavaScript avant le compilateur natif en Go

lschvn

TypeScript 6.0 est sorti ce mois-ci, et il porte un poids que peu de releases mineures assument : c'est la dernière version construite sur la base de code JavaScript actuelle. Tout ce qui suivra, à partir de la 7.0, sera compilé en Go natif — un compilateur que l'équipe développe depuis plus d'un an.

Un pont vers TypeScript 7.0

L'histoire principale, c'est ce que 6.0 ne contient pas. Microsoft le dit clairement : c'est une "release de transition" dont le but est d'aligner les comportements et les API pour que le passage à la base de code Go se fasse sans accroc. L'équipe est directe : "TypeScript 7.0 est en fait extrêmement proche de la complétion." Vous pouvez déjà essayer le preview natif dans VS Code ou via npmx.dev/package/@typescript/native-preview.

La plupart des changements de la 6.0 existent pour faciliter cette transition. Mais il y a aussi des fonctionnalités nouvelles.

Moins de sensibilité au this dans l'inférence de types

Un grain de sable longtemps irritant disparaît. Quand TypeScript infère des paramètres de type depuis un callback, il saute par-dessus les fonctions "sensibles au contexte" — celles dont les paramètres n'ont pas de type explicite. Les méthodes écrites avec la syntaxe shorthand étaient toujours traitées comme sensibles car elles portent un this implicite, même si this n'est jamais utilisé. Les fonctions fléchées n'avaient pas ce problème.

TypeScript 6.0 vérifie désormais si this est réellement référencé avant de marquer une méthode comme sensible. Si vous n'utilisez jamais this, la méthode participe normalement à l'inférence de type. Le correctif a été contribué par Mateusz Burzyński (PR #62243).

Les imports de sous-chemin supportent désormais #/

Node.js a récemment ajouté le support des imports de sous-chemin commençant par #/ plutôt que #/quelquechose. TypeScript 6.0 le prend en charge avec --moduleResolution nodenext et bundler. Vous pouvez désormais écrire :

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

Cela s'aligne avec la façon dont les bundlers gèrent habituellement les alias de chemin et supprime le besoin d'un segment bidon après #.

Combiner --moduleResolution bundler avec commonjs

Auparavant --moduleResolution bundler nécessitait --module esnext ou --module preserve. Avec la dépréciation de moduleResolution: node, cette contrainte est levée. La nouvelle combinaison valide est --module commonjs avec --moduleResolution bundler, un chemin de migration pratique pour beaucoup de projets existants (PR #62320).

Stable Type Ordering pour les migrations 6.0 vers 7.0

Le vérificateur de types parallèle de TypeScript 7.0 trie les objets internes de façon déterministe. TypeScript 6.0 introduit --stableTypeOrdering pour rendre sa sortie conforme à cet ordre. C'est principalement un outil de migration — le flag peut ralentir le type-checking jusqu'à 25% — mais il garantit que les fichiers de déclaration et les messages d'erreur ne changent pas de façon inattendue lors de la montée de version. Le flag n'est pas recommandé pour un usage permanent.

Cible ES2025 et nouveaux types pour les API natives

TypeScript 6.0 ajoute es2025 comme valeur valide pour --target et --lib. Cela apporte RegExp.escape (stage 4) et déplace Promise.try, les méthodes d'itérateur et les méthodes de Set dans la lib stable. L'API Temporal — le remplaçant attendu de Date — reçoit aussi des types intégrés complets dans la 6.0. Les types Map et WeakMap gagnent getOrInsert et getOrInsertComputed (stage 4) pour le pattern courant "get or create".

Consolidation de la lib DOM

Le contenu de lib.dom.iterable.d.ts et lib.dom.asynciterable.d.ts est désormais entièrement fusionné dans lib.dom.d.ts. Vous n'avez plus besoin d'ajouter dom.iterable à votre tableau lib juste pour itérer sur un NodeList.

Breaking Changes qui vous toucheront probablement

TypeScript 6.0 inverse plusieurs valeurs par défaut sur lesquelles des projets plus anciens ont pu s'appuyer :

  • strict est maintenant true par défaut — si vous comptiez sur l'absence de strictitude implicite, passez "strict": false explicitement
  • module est esnext par défaut — l'ESM est désormais le format supposé pour les nouveaux projets
  • target est la valeur de l'année courante (actuellement es2025) — la cible es5 est dépréciée
  • types est maintenant [] par défaut au lieu d'énumérer tout dans node_modules/@types — cela seul a réduit les temps de build de 20 à 50% dans les projets étudiés par l'équipe. Ajoutez des types explicites : ["node", "jest"] etc.
  • rootDir est le répertoire du tsconfig par défaut plutôt que d'être inféré des chemins de fichiers — les répertoires de sources imbriqués peuvent nécessiter une configuration rootDir explicite
  • noUncheckedSideEffectImports est maintenant true par défaut

En résumé

Si vous démarrez un nouveau projet, 6.0 est un choix solide avec des valeurs par défaut modernes et sensées. Si vous êtes sur un projet existant, prévoyez du temps pour ajouter des entrées types explicites et vérifier votre rootDir avant de mettre à jour aveuglément. La 7.0 en Go approche — l'équipe veut que vous soyez sur 6.0 maintenant pour que la transition soit propre.

Installez-la : npm install -D typescript@latest

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Node.js 26.3.0 : Buffer Pool double, permission.drop() arrive, les Macs Intel en péril
TypeScript

Node.js 26.3.0 : Buffer Pool double, permission.drop() arrive, les Macs Intel en péril

Node.js 26.3.0 apporte un Buffer.poolSize par défaut de 64 KiB, une méthode permission.drop() pour abandonner les capacités une par une, un avertissement sur les binaires universels macOS, et un WebCrypto renforcé. npm passe à 11.16.0.
Oxc v0.134 : oxlint v1.68 Ajoute des Règles Vue et des Contrôles TypeScript Accessor
JavaScript

Oxc v0.134 : oxlint v1.68 Ajoute des Règles Vue et des Contrôles TypeScript Accessor

La version de juin d'Oxc publie oxlint v1.68.0 avec deux nouvelles règles Vue, une règle lint method-signature-style pour TypeScript, et des améliorations du parser pour rejecter les déclarations en contexte ambient.
Turborepo v2.9.16 Ajoute le Profiling Mémoire et des Correctifs pnpm
JavaScript

Turborepo v2.9.16 Ajoute le Profiling Mémoire et des Correctifs pnpm

Les dernières versions stables de Turborepo ajoutent le profiling heap allocation via OpenTelemetry, corrigent le comportement des peers injectés pnpm, harden la validation OTEL endpoint, et règlent les hangs de shutdown PTY.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

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