Date de sortie : 28 février 2025
Documentation officielle : Announcing TypeScript 5.8
TypeScript 5.8 affine le typage des expressions conditionnelles dans les retours et facilite la cohabitation ESM/CommonJS sous Node.js 22. Le nouveau flag --erasableSyntaxOnly prépare la compatibilité avec le type-stripping natif de Node.js.
Les nouveautés principales
Vérification granulaire des retours conditionnels
TypeScript vérifie chaque branche d’une expression ternaire dans un return par rapport au type de retour déclaré :
function getStatus(code: number): "ok" | "error" {
// Chaque branche est vérifiée individuellement
return code === 200 ? "ok" : "error";
// Avant : TypeScript vérifiait le type global de l'expression
// Après : chaque branche est vérifiée contre "ok" | "error"
}
require() de modules ESM sous Node.js 22
Sous --module nodenext, TypeScript supporte le require() de fichiers ESM, en phase avec Node.js 22 :
// Un fichier ESM peut maintenant être importé via require()
const { myFunction } = require("./my-esm-module.mjs");
Plus besoin de publier en dual (CJS + ESM) pour que vos packages restent importables partout.
–erasableSyntaxOnly
Ce flag interdit les constructions TypeScript qui ont un comportement au runtime (enums, namespaces, parameter properties) :
// Autorisé : les types sont effacés à la compilation
type User = { name: string };
interface Config { port: number }
// Interdit avec --erasableSyntaxOnly
enum Status { Active, Inactive } // Erreur !
namespace Utils { } // Erreur !
class Foo {
constructor(public name: string) {} // Erreur !
}
Conçu pour la compatibilité avec le type-stripping expérimental de Node.js, qui supprime les types sans transformation.
–module node18
Option stable pour cibler Node.js 18, qui interdit le require() d’ESM et autorise les import assertions (au lieu des import attributes) :
{
"compilerOptions": {
"module": "node18"
}
}
–libReplacement
Désactive la recherche automatique de packages de remplacement de lib :
{
"compilerOptions": {
"libReplacement": false
}
}
Utile si un package @typescript/lib-dom ou similaire est présent accidentellement dans vos dépendances.
Autres améliorations
- Noms de propriétés calculées préservés dans les fichiers de déclaration
- Optimisations de performance pour la normalisation de chemins
- Meilleure gestion des imports de types dans les fichiers .d.ts
Échanger avec un expert TypeScript
Nous revenons vers vous sous 24h.
Chez Makersquad, nous accompagnons nos clients dans le développement d’applications robustes et maintenables grâce à TypeScript. Que ce soit pour structurer un nouveau projet, migrer un codebase existant ou améliorer la qualité et la sécurité de votre application, notre équipe met son expertise TypeScript à votre service.
À retenir
TypeScript 5.8 prépare l’écosystème à la convergence ESM/CJS et au type-stripping natif de Node.js. Si vous visez la compatibilité avec --experimental-strip-types, activez --erasableSyntaxOnly dès maintenant pour identifier les constructions problématiques.