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.

Astro 6.1.8 corrige un bug critique de nom de fichier sur Netlify et une faille de sécurité sur /_image
TypeScript

Astro 6.1.8 corrige un bug critique de nom de fichier sur Netlify et une faille de sécurité sur /_image

Astro 6.1.8 corrige une régression où les noms de fichiers de build contenant des caractères spéciaux cassaient les déploiements Netlify et Vercel, et colmate une faille de confusion content-type dans l'endpoint image intégré qui pouvait servir du non-SVG comme SVG.
SWC v1.15.26 : le compilateur JavaScript propulsé par Rust continue d'avancer
JavaScript

SWC v1.15.26 : le compilateur JavaScript propulsé par Rust continue d'avancer

Le compilateur JavaScript/TypeScript écrit en Rust publié par swc-project sort la v1.15.26 avec des corrections de bugs, des améliorations de performance et une intégration toujours plus profonde dans l'écosystème Node.js.
QuickBEAM : un runtime JavaScript pour la VM BEAM — JavaScript rencontre OTP d'Erlang
JavaScript

QuickBEAM : un runtime JavaScript pour la VM BEAM — JavaScript rencontre OTP d'Erlang

QuickBEAM est un runtime JavaScript qui s'exécute à l'intérieur de la VM BEAM — la même machine virtuelle qui alimente Erlang et Elixir. Il intègre JavaScript dans les arbres de supervision OTP, permet à JS d'appeler des fonctions Elixir et des bibliothèques OTP, et inclut un outil TypeScript intégré.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

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