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.
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
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>;
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>;
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 !
Hey, having any query? Our experts are just one click away to respond you.
Contact Us