TypeScript 5.7 est sorti fin 2024. Un an après, voici ce qui a réellement changé dans mon code au quotidien.

1. Path rewriting natif pour la compilation

Fini les hacks avec tsconfig-paths. TypeScript 5.7 peut maintenant réécrire les imports lors de la compilation via --rewriteRelativeImportExtensions. Un ./foo devient ./foo.js pour Node sans effort.

2. Not-allowed-in-enum

Les valeurs non-constantes dans les enums sont maintenant rejetées par défaut, ce qui évite des comportements bizarres qu'on observait en 5.5/5.6.

3. Améliorations inférence

TypeScript infère mieux les types quand vous chaînez des méthodes :

// 5.7 infère correctement sans annotations
const result = users
  .filter(u => u.active)
  .map(u => u.email)
  .sort();
// result: string[]

Petit gain, mais cumulé sur un codebase c'est significatif.

4. Isolated declarations

Le flag --isolatedDeclarations force l'annotation explicite de tous les types publics. Résultat : build 4x plus rapide sur monorepo avec tsc --build.

Contrainte : vous devez typer explicitement tous les retours publics. Lourd au début, salvateur en équipe à moyen terme.

5. Stage 3 decorators stabilisés

Les décorateurs nouvelle génération (stage 3) sont mûrs. Ça permet d'écrire :

class UserService {
  @log
  @cache(60)
  async getUser(id: string) {
    return db.users.find(id);
  }
}

Sans polyfills, sans Babel, sans experimental flags.

6. Nouveaux types utilitaires

  • NoInfer<T> pour éviter l'inférence automatique sur un paramètre.
  • Awaited<T> stabilisé (déjà là avant mais patterns matures).

Ce que je n'utilise toujours pas

  • Les template literal types complexes : puissants mais illisibles à 3 niveaux d'imbrication.
  • Branded types pour les strings : j'utilise Zod à la place pour valider les entrées.

Mon tsconfig 2026

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "isolatedDeclarations": true,
    "rewriteRelativeImportExtensions": true,
    "verbatimModuleSyntax": true,
    "allowImportingTsExtensions": true
  }
}

Migration depuis 5.4

Globalement indolore si votre code est propre. Les gros projets doivent s'attendre à des warnings isolatedDeclarations à traiter progressivement. Aucun breaking change majeur.

Audit TypeScript ou migration de version ?