TypeScript : le JavaScript typé, vérifié avant l'exécution

TypeScript ajoute des annotations de type à JavaScript, vérifiées à l'écriture puis effacées : ce qu'elles attrapent, et ce qu'elles laissent passer.
3 min de lecture
Believemy logo

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.

JAVASCRIPT
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é.
JAVASCRIPT
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.

Bon à savoir

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

Question

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.


Question

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.


Question

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.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.