0Pricing
TypeScript Academy · Leçon

Inférer la structure des résultats de requêtes

Laisser le générateur de requêtes inférer le type des lignes retournées.

Inférer la structure des résultats de requêtes est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. 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 4 leçons au total.

Le type de résultat suit la sélection

Un excellent constructeur de requêtes ne se contente pas de valider les entrées : il infère la forme exacte de chaque ligne de résultat à partir des colonnes sélectionnées. Sélectionnez moins de colonnes et le type de résultat devient plus précis.

Sélection de la ligne complète

Appeler select() sans projection renvoie le type de ligne complet.

const rows = await db.select().from(users);
// rows: { id: number; name: string; age: number | null; isAdmin: boolean }[]

Une sélection partielle réduit le type

Projetez uniquement les colonnes dont vous avez besoin et le type de résultat ne contient que ces clés.

const rows = await db
  .select({ id: users.id, name: users.name })
  .from(users);
// rows: { id: number; name: string }[]
// Accessing rows[0].age is a compile error.

Renommer des colonnes dans le résultat

Les clés de l’objet de sélection deviennent les clés du résultat. Vous pouvez donc les renommer librement, et le type reflète les nouveaux noms.

const rows = await db
  .select({ userId: users.id, fullName: users.name })
  .from(users);
// rows: { userId: number; fullName: string }[]

Colonnes calculées et agrégées

Les agrégats portent leur propre type inféré. count() produit un nombre ; la clé d’alias lui donne son nom dans le résultat.

import { count } from "drizzle-orm";

const rows = await db
  .select({ total: count() })
  .from(users);
// rows: { total: number }[]

La nullabilité se propage

Si vous sélectionnez une colonne nullable, sa nullabilité est conservée dans le résultat. Sélectionner age conserve le type number | null.

const rows = await db.select({ age: users.age }).from(users);
// rows: { age: number | null }[]

Construction de l’inférence

Le type de résultat est un type mappé sur l’objet de sélection : chaque valeur est une colonne dont le type de data (et la nullabilité) est reporté dans la clé correspondante.

type InferSelect<S> = {
  [K in keyof S]: S[K] extends Column<infer D, infer Null>
    ? Null extends true ? D | null : D
    : never;
};

Assistants pour une seule ligne

Certains constructeurs proposent un accès avec .get() ou [0]. Le type de l’élément est toujours dérivé de la même sélection, mais extrait du tableau.

const one = (await db.select({ id: users.id }).from(users))[0];
// one: { id: number } | undefined

Les jointures étendent la structure

Lorsque vous effectuez une jointure, le type de résultat gagne des clés provenant de la table jointe. Les sélections partielles sur plusieurs tables jointes restent précisément réduites. (Les jointures feront l’objet d’une leçon distincte.)

const rows = await db
  .select({ name: users.name, title: posts.title })
  .from(users)
  .innerJoin(posts, eq(posts.authorId, users.id));
// rows: { name: string; title: string }[]

Pourquoi la réduction du type est importante

Ne renvoyer que les clés sélectionnées évite de dépendre par accident de colonnes que vous n’avez pas récupérées. Le type reflète le SQL réel : les problèmes de récupération excessive ou insuffisante apparaissent donc dans l’éditeur.

Piège&nbsp;: étaler puis sélectionner

Si vous récupérez la ligne complète, puis sélectionnez manuellement les clés dans JS, vous perdez l’avantage de la réduction effectuée au niveau de la base de données et envoyez des colonnes supplémentaires sur le réseau. Préférez réduire le résultat dès la requête.

Vérification rapide

Confirmez votre compréhension des formes de résultats inférées.

Récapitulatif

Le type de résultat est calculé à partir de la sélection au moyen d’un type mappé : les sélections complètes renvoient la ligne entière, les sélections partielles se limitent aux clés choisies, les renommages modifient les clés du résultat, la nullabilité se propage et les agrégats portent leurs propres types. Le type statique reflète toujours le SQL que vous avez réellement écrit.

Questions Fréquemment Posées

La leçon « Inférer la structure des résultats de requêtes » est-elle gratuite ?

Oui — le texte complet de « Inférer la structure des résultats de requêtes » 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 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Inférer la structure des résultats de requêtes » ?

Laisser le générateur de requêtes inférer le type des lignes retournées. 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 4.

Combien de temps prend la leçon « Inférer la structure des résultats de requêtes » ?

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. Correspondance entre schéma et type
  2. Construction de requêtes sûre du point de vue du typage
  3. Inférer la structure des résultats de requêtes
  4. Relations et jointures avec les types
← Retour à TypeScript Academy