TypeScript Academy · Leçon

Motifs réutilisables pour les modèles de données

Appliquez des motifs génériques à des modèles réels : Paginated , Result , DTO avec Pick/Omit/Partial et dictionnaires indexés par identifiant.

Leçon 3 sur 38 étapes

Motifs réutilisables pour les modèles de données est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 3 leçons au total.

Introduction

Objectif : regrouper les structures de données courantes sous forme de types génériques afin de réutiliser la structure sans perdre la sûreté des types.

  • Paginated<T>
  • Result<T,E>
  • DTO avec Pick/Omit/Partial
  • Mappages indexés par id

Paginated<T>

Paginated<T> centralise les métadonnées et conserve le type d'élément T précis pour les listes.

type Paginated<T> = {
  items: T[];
  total: number;
  page: number;
  pageSize: number;
};

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

const page1: Paginated<User> = {
  items: [{ id: 1, name: "Ada" }],
  total: 10,
  page: 1,
  pageSize: 5,
};

console.log(page1.items[0].name);

Result<T,E>

Result<T,E> modélise explicitement la réussite ou l'échec avec un discriminant (ok) pour effectuer des branchements sûrs.

type Ok<T> = { ok: true; data: T };
type Err<E = string> = { ok: false; error: E };

type Result<T, E = string> = Ok<T> | Err<E>;

function readUser(id: number): Result<{ id: number; name: string }> {
  return id > 0 ? { ok: true, data: { id, name: "Ada" } } : { ok: false, error: "not found" };
}

const r = readUser(1);
if (r.ok) {
  console.log(r.data.name);
} else {
  console.error(r.error);
}

Modèles de DTO

Avec Pick/Omit/Partial, vous dérivez des types DTO concis à partir de votre modèle central, sans duplication.

type User = { id: number; name: string; email?: string; role: "user" | "admin" };

type UserCreateDto = Pick<User, "name" | "email">; // fields required to create

// Update = partial editable fields
type UserUpdateDto = Partial<Pick<User, "name" | "email">>;

const createBody: UserCreateDto = { name: "Ada", email: "a@x.io" };
const updateBody: UserUpdateDto = { name: "Ada L." };

MapById<T>

MapById<T> indexe les entités par id pour une recherche rapide. Contraignez T afin de garantir l'existence d'un id.

type Key = string | number;

type MapById<T extends { id: Key }> = Record<Key, T>;

const byId: MapById<{ id: number; name: string }> = {
  1: { id: 1, name: "Ada" },
  2: { id: 2, name: "Lin" },
};

console.log(byId[1].name);

Conseils

Conseils :

  • Gardez les modèles petits et composables.
  • Privilégiez les unions discriminées pour les machines à états.
  • Déduisez les DTO des modèles : évitez les copies manuelles.

Vérification de Paginated<T>

Vérification rapide : pourquoi définir un type générique Paginated<T> ?

Récapitulatif

Récapitulatif : généralisez les structures récurrentes : Paginated<T>, Result<T,E>, les DTO avec Pick/Omit/Partial et les mappages indexés par id. Les petites fonctions utilitaires s'adaptent à toutes les fonctionnalités.

Gratuit pour commencer

Apprends TypeScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
101
Leçons
352

Questions Fréquemment Posées

La leçon « Motifs réutilisables pour les modèles de données » est-elle gratuite ?

Oui — le texte complet de « Motifs réutilisables pour les modèles de données » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Motifs réutilisables pour les modèles de données » ?

Appliquez des motifs génériques à des modèles réels : Paginated , Result , DTO avec Pick/Omit/Partial et dictionnaires indexés par identifiant. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer TypeScript Academy ?

Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.

Combien de temps prend la leçon « Motifs réutilisables pour les modèles de données » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?

Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Interfaces et alias de types génériques
  2. Types conditionnels (introduction) et distribution sur les unions
  3. Motifs réutilisables pour les modèles de données
← Retour à TypeScript Academy