Compiler : ce que devient TypeScript
tsc, ce qui disparaît, noEmit et tsx en dev.
Objectifs
À la fin de cette leçon, vous saurez :
- compiler avec tsc et lire le JS produit ;
- vérifier que les types disparaissent entièrement ;
- exécuter en dev avec tsx/ts-node.
🔗 Pour vous rafraîchir la mémoire : package.json et scripts npm
La compilation, pas à pas
npm install -D typescript
npx tsc init # crée tsconfig.json
// user.ts
interface Utilisateur {
nom: string;
}
function saluer(u: Utilisateur): string {
return `Bonjour ${u.nom}`;
}
npx tsc user.ts
cat user.js
Résultat :
function saluer(u) {
return "Bonjour " + u.nom;
}
Tout a disparu : l'interface, les annotations, le type de retour. Le JS exécuté est du JS ordinaire — vos navigateurs et Node ne sauront jamais qu'il y avait des types. C'est la réponse à la question du programme : « Que reste-t-il de TypeScript après compilation ? » Rien, hormis un code plus propre que vous auriez écrit.
Vérifier sans produire
npx tsc --noEmit # contrôle total du projet, zéro fichier généré
C'est LA commande des CI : elle rejette tout code mal typé avant tout test.
Exécuter directement en développement
Compiler à chaque modification est fastidieux. Deux outils exécutent TS « comme si » :
npm install -D tsx
tsx src/serveur.ts # exécution immédiate (transpile + run)
npx tsc --watch # ou recompilation continue vers dist/
node dist/serveur.js
Le schéma mental complet :
DEV : .ts ──(tsx/watch)──→ exécution immédiate
PROD : .ts ──tsc──→ dist/*.js ──→ node dist/serveur.js
CI : tsc --noEmit → erreurs bloquantes avant tests
Les erreurs typiques qui sauvent
const u = { nom: "Ana" };
console.log(u.nomm); // ❌ Property 'nomm' does not exist
function envoyer(id: number) {}
envoyer("42"); // ❌ string ≠ number
let x: string | null = trouver();
console.log(x.length); // ❌ 'x' is possibly null
La troisième famille (null checks) élimine toute une catégorie de crashes production : TS refuse d'utiliser une valeur potentiellement absente sans garde (if (x) ou ??).
Exercice
- Compilez votre module math et comparez source/produit ligne par ligne.
- Introduisez trois fautes volontaires ; corrigez-les guidé par tsc.
- Ajoutez
--noEmitdans un script npmtypecheck. - Pourquoi les types ne peuvent-ils PAS protéger contre un JSON malformé ?
Résumé
- tsc efface tout type : le produit est du JS pur.
- --noEmit pour vérifier partout ; tsx pour le confort en dev.
- Null-safety = classe entière de bugs éliminée à l'écriture.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 4. Les types n'existent qu'à la compilation sur du code que VOUS contrôlez. Une donnée réseau arrive à l'exécution, quand aucun type n'existe déjà. D'où la double protection : types internes + validation runtime aux frontières (DTO/schémas).