Chapitre 1 · Leçon 2
Écrire des fonctions et classes typées et réutilisables
Section 1
Step 1
Sans génériques, tu dois choisir entre any (perd le typage) ou dupliquer le code pour chaque type. Les génériques permettent des fonctions typées ET réutilisables.
snippet.typescript
1// ❌ Sans générique : perd le type
2function first(arr: any[]): any {
3 return arr[0];
4}
5const num = first([1, 2, 3]); // type: any — TypeScript ne sait pas que c'est number
6
7// ✅ Avec générique : préserve le type
8function first<T>(arr: T[]): T | undefined {
9 return arr[0];
10}
11
12const num2 = first([1, 2, 3]); // type: number | undefined ✓
13const str = first(["a", "b"]); // type: string | undefined ✓
14
15// Générique avec contrainte
16function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
17 return obj[key];
18}
19
20const user = { id: "1", name: "Usher", age: 28 };
21const name = getProperty(user, "name"); // type: string ✓
22// getProperty(user, "missing"); ← Erreur TypeScript ✓Step 2
TypeScript fournit des utility types génériques très utiles. Ils évitent de réinventer la roue pour les transformations de types courantes.