Se rendre au contenu

TypeScript 5.8 est sorti

28 février 2025 par
TypeScript 5.8 est sorti
Makersquad

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.

TypeScript 5.7 est sorti