# TypeScript : JavaScript avec un gilet de sauvetage

> TypeScript ajoute des types à JavaScript. Le compilateur attrape les erreurs avant que l'utilisateur ne les voie. Simple, mais ça change tout.


*Ou : Pourquoi ajouter des contraintes à un langage le rend paradoxalement plus libre*

---

[JavaScript](/glossaire/developpement-web/javascript/) est un langage à typage dynamique. `let x = 5` suivi de `x = "hello"` est parfaitement légal. La variable change de type sans prévenir. C'est flexible. C'est aussi la source d'une catégorie entière de bugs qui n'explosent qu'en production.

**TypeScript** est la réponse de Microsoft à ce problème. Sorti en 2012, c'est un *surensemble* de JavaScript — tout code JavaScript valide est du TypeScript valide, mais TypeScript ajoute un système de **typage statique**. Vous déclarez les types, et le compilateur vérifie que tout est cohérent *avant* l'exécution. « Cannot read property of undefined » passe de « bug signalé par un client frustré » à « erreur soulignée en rouge dans l'éditeur ».

## Ce que TypeScript ajoute (et ce qu'il ne change pas)

{.subtitle}

### Les types en pratique

```typescript
// JavaScript : aucune garantie
function greet(name) {
  return "Hello, " + name.toUpperCase();
}
greet(42); // Runtime error

// TypeScript : erreur à la compilation
function greet(name: string): string {
  return "Hello, " + name.toUpperCase();
}
greet(42); // ❌ Compilation error
```

### L'adoption massive

TypeScript est devenu le standard de fait pour les projets JavaScript d'envergure. Angular l'impose, React et Vue 3 le supportent nativement, la majorité des bibliothèques npm incluent des déclarations de types.

### Le dialogue du refactoring

**DevOps Dave :** J'ai renommé un champ dans l'[API](/glossaire/developpement-web/api-rest/). Le backend compile. C'est déployé.

**Security Sarah :** Le frontend ?

**DevOps Dave :** C'est du JavaScript, pas de compilation. Ça devrait marcher.

**Security Sarah :** « Ça devrait. » En TypeScript, le compilateur te dirait exactement où le champ est utilisé et marquerait chaque occurrence en erreur. En JavaScript, tu le découvriras quand les utilisateurs te le diront.

### Tableau récapitulatif

| Concept | En une phrase |
| :-- | :-- |
| **TypeScript** | Surensemble de JavaScript avec typage statique — compile vers JavaScript. |
| **Typage statique** | Les types sont vérifiés à la compilation, pas à l'exécution. |
| **Interface** | Contrat qui définit la forme d'un objet (quels champs, quels types). |
| **Generics** | Types paramétriques qui permettent du code réutilisable et type-safe. |

### Le mot de la fin

TypeScript ne rend pas JavaScript meilleur — il rend les développeurs JavaScript plus confiants. Le langage reste le même en dessous. Ce qui change, c'est la capacité à refactorer sans peur, à comprendre le code des autres sans deviner, et à détecter les erreurs avant qu'elles ne coûtent cher.


