TypeScript 5.5 a introduit --isolatedDeclarations, une option qui change radicalement la donne pour les monorepos. Si vous travaillez avec des dépendances imbriquées et que vos builds traînent, cet article va vous intéresser.
TL;DR - Impact Mesurable
- ✅ Builds : 30+ secondes → millisecondes
- ✅ Gain moyen : x3, jusqu'à x15
- ✅ Parallélisation native des
.d.ts - ✅ Compatible Bun, swc, esbuild
- ⚠️ Trade-off : annotations explicites sur exports publics
🚨 Le Problème des Builds Séquentiels
Dans un monorepo avec des dépendances imbriquées comme A → B → C → D, TypeScript doit tout type-checker dans l'ordre pour générer les fichiers .d.ts.
Architecture monorepo typique :
monorepo/ ├── packages/ │ ├── core/ (package A) │ ├── utils/ (package B, dépend de A) │ ├── components/ (package C, dépend de B) │ └── app/ (package D, dépend de C) └── tsconfig.json
Résultat ? Des builds séquentiels qui durent :
- 30 secondes pour une lib moyenne
- Plusieurs minutes pour un monorepo complet
- Impossible de paralléliser car chaque package attend les
.d.tsdu précédent
Pourquoi c'est si lent ?
Générer les .d.ts nécessite l'inférence de types complète. TypeScript doit :
- Analyser tout le code source
- Résoudre tous les imports
- Inférer les types de retour
- Propager les types à travers le graphe de dépendances
✨ La Solution: --isolatedDeclarations
Le principe est simple mais puissant : chaque fichier peut être traité indépendamment, en parallèle. Plus besoin d'analyser tout le codebase pour générer les déclarations.
❌ Sans --isolatedDeclarations
✅ Avec --isolatedDeclarations
La génération de déclarations devient une simple opération syntaxique qui prend des millisecondes au lieu de minutes. Plus d'attente, plus de dépendances séquentielles.
📊 Benchmarks et Résultats Réels
Gains Mesurés
Cas d'usage typiques
🎯 Bonus : Écosystème
Avec --isolatedDeclarations, des outils comme Bun, swcet esbuild peuvent maintenant générer des .d.ts sans invoquer tsc.
Résultat : encore plus de vitesse avec des transpileurs optimisés.
⚖️ Le Trade-off : Annotations Explicites
Pour que TypeScript puisse générer les déclarations de manière isolée, tu dois annoter explicitement tes exports publics. Pas le code interne, juste ce qui sort de ton module.
❌ Avant (inférence implicite)
// ❌ Erreur avec --isolatedDeclarations
export function calculatePrice(items) {
return items.reduce((sum, item) =>
sum + item.price, 0
);
}
// TypeScript doit inférer le type de retour
// → impossible en mode isolé✅ Après (annotation explicite)
// ✅ OK avec --isolatedDeclarations
export function calculatePrice(
items: Array<{ price: number }>
): number {
return items.reduce((sum, item) =>
sum + item.price, 0
);
}💡 Bénéfices cachés
- ✅ API plus claire pour tes utilisateurs
- ✅ Documentation automatique via les types
- ✅ Contrat d'interface explicite entre packages
- ✅ Détection précoce des breaking changes
Code interne : inférence normale
// ✅ Code interne : pas besoin d'annotations
function internalHelper(x) { // OK
const result = x * 2; // OK
return result; // OK
}
// ❌ Export public : annotation requise
export function publicAPI(x): number { // ← annotation obligatoire
return internalHelper(x);
}🔧 Migration Pratique
Configuration tsconfig.json
{
"compilerOptions": {
// Active l'option (TS 5.5+)
"isolatedDeclarations": true,
// Requis pour générer les .d.ts
"declaration": true,
// Optionnel : pour monorepos avec project references
"composite": true,
// Recommandé
"strict": true
}
}Migration d'un projet existant
Active l'option
Ajoute "isolatedDeclarations": true dans tsconfig.json
Lance le build
npm run build
TypeScript va signaler tous les exports qui nécessitent des annotations.
Utilise les Quick Fixes
VS Code propose des Quick Fixes automatiques pour ajouter les types manquants. Migration en 5 minutes chrono pour la plupart des projets.
Vérifie les gains
time npm run build
Compare avant/après pour mesurer l'impact.
💡 Recommandations VOID
🆕 Nouveau projet
Active --isolatedDeclarations dès le départ. Pas de migration, juste de bonnes pratiques dès le début.
🔄 Migration
5 minutes chrono avec les Quick Fixes de TypeScript 5.5. ROI immédiat sur les temps de build.
🏢 Monorepo
Indispensable pour débloquer les performances. Le gain est exponentiel avec le nombre de packages.
⚙️ Configuration CI/CD Optimale
# .github/workflows/build.yml
- name: Build monorepo
run: |
# Avec --isolatedDeclarations, on peut paralléliser
npm run build --workspaces --if-present --parallel
# Ou avec Turborepo
turbo run build --parallel❓ FAQ Technique
Dois-je annoter tout mon code ?
Non, uniquement les exports publics de tes modules. Le code interne continue à bénéficier de l'inférence normale.
Est-ce compatible avec mes outils actuels ?
Oui. Compatible avec TypeScript 5.5+, Webpack, Vite, Rollup, esbuild, swc, Bun. Aucun changement dans ton pipeline de build.
Quel est le coût de migration ?
5-30 minutes pour un projet moyen grâce aux Quick Fixes automatiques de VS Code. Le ROI est immédiat sur les builds suivants.
Puis-je l'activer progressivement ?
Oui, par package dans un monorepo. Commence par les libs les plus utilisées, puis étends progressivement.
🎯 Conclusion
TypeScript 5.5 --isolatedDeclarations : Game Changer
- ⚡Builds x3 à x15 plus rapides - gain immédiat sur le workflow
- 🚀Parallélisation native - déblocage des monorepos complexes
- 💎API plus claire - meilleure documentation et DX
- 🔧Migration rapide - Quick Fixes automatiques en 5 minutes
L'adoption de --isolatedDeclarations n'est pas qu'une optimisation technique, c'est un investissement dans la productivité de votre équipe. Les gains de temps sur chaque build se cumulent rapidement : plusieurs heures économisées par semainepour une équipe de 5 développeurs.
📊 ROI Développeur (équipe de 5 devs)
- • 20 builds/jour/dev × 5 devs = 100 builds/jour
- • Gain moyen : 25 secondes/build
- • Économie journalière : 42 minutes
- • Économie mensuelle : 14 heures (presque 2 jours de travail)
Tu utilises déjà --isolatedDeclarations en prod ?
Partage ton retour d'expérience et tes benchmarks avec la communauté. Besoin d'aide pour optimiser votre monorepo TypeScript ?
Discutons de votre projet