Exploration des types avancés en TypeScript : Types conditionnels et types mappés

Mar 28, 2025
content_copy

TypeScript est devenu un outil indispensable pour les développeurs modernes, offrant des fonctionnalités puissantes pour garantir des bases de code robustes et maintenables. Parmi ses capacités les plus avancées figurent Types conditionnels et Types mappés, qui fournissent un contrôle granulaire sur les transformations et les décisions de type. Ces fonctionnalités débloquent une flexibilité et une précision incroyables, faisant de TypeScript bien plus qu’un simple « JavaScript avec types ».

Dans ce blog, nous allons plonger dans ces types avancés, explorer leur syntaxe et leurs cas d’utilisation, et découvrir comment ils peuvent améliorer vos projets TypeScript.

Que sont les types conditionnels ?

Les types conditionnels vous permettent d’exprimer des relations de types et une logique qui dépendent des conditions. Ils s’apparentent à l’opérateur ternaire de JavaScript mais sont adaptés aux types.

T extends U ? X : Y

Cela se lit comme suit : Si T s’étend DANS, alors le type est X; sinon c’est ET.

Cas d’utilisation : inférence de type simplifiée

Imaginez que vous souhaitiez créer un type d’utilitaire qui extrait le type de retour d’une fonction. En utilisant des types conditionnels, vous pouvez y parvenir facilement :

type ReturnType<T> = T extends (…args: any[]) => infer R ? R : never; 

const exampleFn = (x: number): string => x.toString(); type ExampleReturnType = ReturnType<typeof exampleFn>; // string

Ici, le déduire Le mot-clé est utilisé pour capturer et extraire le type de retour.

Cas d’utilisation : Exclusion de types

Les types conditionnels brillent également dans le filtrage de types. Par exemple, vous pouvez créer un type qui exclut certains types :

type Exclude<T, U> = T extends U ? never : T; 

type AllowedTypes = Exclude<string | number | boolean, boolean>; // string | number

Que sont les types mappés ?

Les types mappés vous permettent de transformer systématiquement les propriétés d’un type donné. Ils sont incroyablement utiles pour créer des variations de types existants sans répétition manuelle.

type MappedType<T> = { [P in keyof T]: Transformation }; 

Ici, P. parcourt les clés de T, et vous pouvez appliquer n’importe quelle transformation aux types de propriétés.

Cas d’utilisation : Rendre les propriétés optionnelles

Supposons que vous ayez un type dans lequel vous souhaitez rendre toutes les propriétés facultatives :

type Partial<T> = { [P in keyof T]?: T[P]; }; 

type User = { name: string; age: number; }; 

type OptionalUser = Partial<User>; // { name?: string; age?: number }

Cas d’utilisation : Propriétés en lecture seule

Vous pouvez rendre toutes les propriétés en lecture seule à l’aide de types mappés :

type Readonly<T> = { readonly [P in keyof T]: T[P]; };

 type ReadonlyUser = Readonly<User>;

Combinaison des types mappés et conditionnels

Le véritable pouvoir de ces types apparaît lorsqu’ils sont combinés. Par exemple, vous pouvez créer un type d’utilitaire qui rend les propriétés en lecture seule uniquement si elles correspondent à une certaine condition :

type ReadonlyIfString<T> = { [P in keyof T]: T[P] extends string ? Readonly<T[P]> : T[P]; }; 

type MixedType = { name: string; age: number; }; 

type ConditionalReadonly = ReadonlyIfString<MixedType>;

Applications réelles

  • Gestion des réponses de l’API

    Les types conditionnels et mappés peuvent aider à créer des types précis pour les réponses API, rendant ainsi la gestion des erreurs et la transformation des données plus sûres.

    type ApiResponse<T> = { data: T extends null | undefined ? never : T; error: string | null; };

    type UserData = { name: string; age: number };

    type UserResponse = ApiResponse<UserData | null>;

  • Validation des formulaires

    Lors de la création de formulaires, vous pouvez utiliser des types mappés pour créer dynamiquement des types pour les règles de validation :

    type ValidationRules<T> = { [P in keyof T]?: (value: T[P]) => boolean; };

    type FormValues = { email: string; password: string; };

    type FormValidation = ValidationRules<FormValues>;

Principaux enseignements

  • Types conditionnels apportez des transformations de type dynamiques basées sur des conditions, faisant de TypeScript un outil puissant pour la programmation générique.

  • Types mappés vous permettent de créer des variantes de types existants avec un minimum d’effort.

  • Ensemble, ils permettent aux développeurs de créer des utilitaires de type hautement réutilisables et précis, réduisant ainsi le passe-partout et améliorant la sécurité du code.

Conclusion

Comprendre et exploiter les types conditionnels et mappés élèvera vos compétences TypeScript au niveau supérieur. Ces types avancés améliorent non seulement la sécurité des types, mais aident également à créer un code plus expressif, réutilisable et maintenable. Qu’il s’agisse de réponses API, de validation de formulaires ou de filtrage de types, ces outils offrent la flexibilité nécessaire pour créer des systèmes de types plus intelligents.

TypeScript continue de repousser les limites de la saisie statique en JavaScript, et la maîtrise de ces fonctionnalités est une étape vers l’exploitation de son plein potentiel. Bon codage !

Laisser un commentaire

We welcome relevant and respectful comments. Off-topic comments may be removed.

×

Hey, having any query? Our experts are just one click away to respond you.

Contact Us
×
Always Available to help you

Connect With:

HR Sales
Whatsapp Logo
Get Quote
expand_less