spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript est devenu la norme de l'industrie pour le développement web à grande échelle. Alors que la plupart des développeurs connaissent les bases des interfaces et des types, la véritable puissance réside dans son système de types avancé. Voici 5 modèles qui vous distingueront en tant qu'ingénieur senior.34## 1. Contraintes Génériques56Les génériques sont puissants, mais il faut parfois limiter ce qui peut être transmis. `extends` est votre ami ici.78```typescript9interface HasId {10 id: string;11}1213function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```1718En nous assurant que `T` étend `HasId`, nous garantissons que l'accès à `.id` à l'intérieur de la fonction est sûr.1920## 2. Types Conditionnels2122Les types conditionnels vous permettent de créer des mappages de types non uniformes. La syntaxe est similaire à celle de l'opérateur ternaire en JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Un cas d'utilisation pratique consiste à filtrer les types d'une union :3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Types Mappés3940Les types mappés vous permettent de créer de nouveaux types basés sur d'anciens en transformant les propriétés.4142```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};4647interface User {48 name: string;49 age: number;50}5152type ReadOnlyUser = ReadOnly<User>;53```5455Vous pouvez même ajouter ou supprimer des modificateurs :5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Types Littéraux de Modèle6465Introduits dans TypeScript 4.1, ceux-ci vous permettent de manipuler directement les types de chaînes.6667```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"7071type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';7374type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```7778C'est incroyablement utile pour typer des chaînes qui suivent un modèle spécifique, comme des classes CSS ou des noms d'événements.7980## 5. Le Mot-clé `infer`8182Le mot-clé `infer` dans les types conditionnels vous permet d'extraire des types d'autres types.8384```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;8687function check(): boolean {88 return true;89}9091type CheckReturn = ReturnType<typeof check>; // boolean92```9394Ici, nous demandons à TypeScript d'"inférer" le type de retour `R` d'une fonction et de le renvoyer.9596## Conclusion9798La maîtrise de ces modèles vous permet d'écrire des bibliothèques et des utilitaires robustes et offrant une excellente expérience développeur (DX). L'objectif du TypeScript avancé n'est pas la complexité pour la complexité, mais la sécurité et l'expressivité.99
:5 Modèles TypeScript Avancés pour Ingénieurs Seniorslines 1-99 (END) — press q to close