Un champ renommé dans une réponse d'API, et trois écrans se vident en production. JavaScript n'a rien vu venir : il ne découvre la forme d'une valeur qu'au moment où elle lui manque.
TypeScript déplace ce contrôle en amont, pendant l'écriture, sans rien changer au code qui finit par tourner.
Définition
TypeScript est un sur-ensemble de JavaScript : tout fichier JavaScript valide est déjà un fichier TypeScript valide. Il ajoute des annotations de type, que son compilateur vérifie puis efface. Le navigateur ne reçoit que du JavaScript ordinaire.
type Facture = {
id: number;
montant: number;
payee: boolean;
};
function resumer(facture: Facture): string {
return `Facture ${facture.id} : ${facture.montant} euros`;
}
resumer({ id: 42, montant: 19, payee: true }); // accepté
resumer({ id: 42, montant: "19", payee: true }); // refuséLa dernière ligne ne passe pas le compilateur, qui répond Type 'string' is not assignable to type 'number'. Le signalement apparaît dans l'éditeur, à la frappe, et non trois semaines plus tard dans un rapport de bug.
Ce que les types attrapent
- Les fautes de frappe sur un nom de propriété ou de méthode, première cause de TypeError en production.
- Les valeurs manquantes : en mode strict, une recherche qui peut ne rien trouver oblige à traiter le cas undefined.
- Les cas oubliés d'un Type union, quand un switch ne couvre pas toutes les valeurs possibles.
- Les signatures : un argument en trop, un argument oublié, un return qui ne rend pas ce qui était annoncé.
const client = clients.find((c) => c.id === 42);
console.log(client.nom);
// 'client' is possibly 'undefined'.La méthode find peut ne rien trouver. En JavaScript, cette ligne casse le jour où le client 42 disparaît. En TypeScript strict, elle ne compile pas tant que le cas vide n'est pas traité.
Ce que les types n'attrapent pas
Les annotations disparaissent à la compilation. Rien ne subsiste à l'exécution pour contrôler une donnée qui arrive du réseau, d'un formulaire ou d'un fichier JSON : le type déclaré est une promesse faite au compilateur, pas une vérification.
Annoncer qu'une réponse d'API est de type Facture ne la rend pas conforme. Pour contrôler une donnée entrante pour de vrai, il faut une vérification à l'exécution, du genre de celle que fait Zod.
Questions fréquentes
Faut-il tout réécrire pour passer à TypeScript ?
Non, et c'est ce qui explique son adoption. L'option allowJs laisse cohabiter les deux extensions dans un même projet, ce qui permet de convertir fichier par fichier. Les commentaires JSDoc offrent même une étape intermédiaire, sans renommer quoi que ce soit.
TypeScript ralentit-il l'application ?
Pas d'un millième de seconde : le code livré est du JavaScript dont les annotations ont été retirées. Le coût est ailleurs, dans la compilation et dans le temps d'apprentissage. Sur un projet qui vit plusieurs années, il se rembourse à la première refonte sérieuse.
Le mode strict vaut-il la peine ?
Oui, c'est même le seul réglage qui change vraiment la donne : sans lui, null et undefined se glissent partout et la moitié des garanties tombe. Sur un projet existant, on l'active option par option pour éviter le mur de mille erreurs d'un coup. La formation TypeScript suit ce chemin, d'un projet JavaScript ordinaire à un projet strict.