Comprendre quelques utility types TypeScript utiles

Dans ce guide rapide, nous passons en revue quatre utility types courants et pratiques de TypeScript : Pick, Omit, Exclude et Extract.

Vous pouvez les utiliser dès maintenant dans n’importe quel projet TypeScript, car ils sont intégrés au langage.

Ces utilitaires se répartissent en deux groupes :

  • Pick et Omit s’appliquent aux types objets
  • Exclude et Extract s’appliquent aux types union

Voyons comment les utiliser avec quelques exemples simples.

Travailler avec les objets : Pick et Omit

Imaginez que vous ayez un grand type Album. Si vous souhaitez en créer une version qui ne contient que certaines propriétés, vous pouvez utiliser Pick.

Pick - « ne conserver que ces clés »

type AlbumData = Pick<Album, "title" | "artist">;

Vous obtenez ainsi un type objet qui ne contient que title et artist. Pick prend le type objet d’origine et une union des clés à inclure.

Omit - « supprimer ces clés »

type AlbumData = Omit<Album, "id" | "releaseYear" | "genre">;

Le résultat est le même type, sans ces clés. Si vous retirez "genre" de la liste de Omit, alors genre réapparaît. Pick et Omit ne modifient pas le type d’origine : ils renvoient simplement un nouveau type transformé.

Travailler avec les unions : Exclude et Extract

Si vous essayez d’utiliser Extract à la place de Pick, TypeScript ne plantera pas, mais votre type deviendra never, car Extract n’est pas conçu pour les objets : il ne fonctionne qu’avec les unions. Le même problème se présente si vous remplacez Omit par Exclude.

Exclude - « retirer un élément d’une union »

Supposons que vous ayez une union comme celle-ci :

type AlbumState = Released | Recording | Mixing;

Pour obtenir tout sauf Released, vous pouvez écrire :

type NotReleased = Exclude<AlbumState, Released>;

Le résultat est Recording | Mixing. Vous pouvez également exclure des éléments à partir d’une forme partagée.

Extract - « ne conserver que les éléments correspondants d’une union »

Avec une union comme celle-ci :

type Example = "A" | "B" | "C" | 1 | 2;

En utilisant Extract :

type Strings = Extract<Example, string>;

Vous obtenez alors "A" | "B" | "C".

En utilisant plutôt Exclude :

type Numbers = Exclude<Example, string>;

Vous obtenez 1 | 2.

Utiliser Pick ou Omit sur des types union ne provoquera pas d’erreur, mais les résultats n’auront pas de sens, car ces utilitaires ne sont pas conçus pour les unions.

Conclusion

Ces quatre utilitaires sont simples, mais puissants pour façonner vos types. Utilisez Pick et Omit pour les objets, et Extract et Exclude pour les unions.