Construction de requêtes sûre du point de vue du typage
Créer des requêtes qui rejettent les colonnes invalides à la compilation.
Construction de requêtes sûre du point de vue du typage est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Des requêtes qui ne peuvent pas référencer de colonnes inconnues
Un constructeur de requêtes sûr du point de vue des types rejette, au moment de la compilation, les noms de colonnes qui n’existent pas dans la table. Vous référencez les colonnes au moyen d’objets typés, et non de chaînes brutes.
Références de colonnes typées
Après avoir défini une table, chaque colonne est une propriété de l’objet représentant la table. Vous transmettez ces propriétés, et non des chaînes, aux filtres et aux sélections.
import { eq } from "drizzle-orm";
// users.id and users.name are typed column objects
const rows = await db
.select()
.from(users)
.where(eq(users.id, 1));Colonne inconnue = erreur de compilation
Comme les colonnes sont de véritables propriétés, une faute de frappe est détectée immédiatement. Il n’existe pas d’échappatoire reposant sur des chaînes non typées.
await db.select().from(users).where(eq(users.idd, 1));
// ^^^^
// Error: Property "idd" does not exist on the users table.Opérandes de comparaison typés
Les opérateurs comme eq sont génériques par rapport au type de la colonne. Comparer une colonne numérique à une chaîne provoque une erreur de type.
eq(users.age, 30); // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to numberSélectionner des colonnes précises
Transmettez un objet dont les valeurs sont des références de colonnes pour sélectionner un sous-ensemble. Les clés que vous choisissez deviennent les clés du résultat.
const partial = await db
.select({ id: users.id, name: users.name })
.from(users);
// result rows: { id: number; name: string }[]Rejeter les colonnes d’autres tables
La sélection est limitée aux colonnes de la ou des tables interrogées. Référencer une colonne d’une table sans rapport provoque une erreur de compilation.
await db
.select({ title: posts.title }) // posts not in this query
.from(users);
// Error: posts.title is not part of the FROM clause.Conditions composables
Les conditions se combinent avec and, or et not. Chaque élément reste typé, de sorte qu’une condition mal formée est détectée, même au plus profond d’un arbre.
import { and, gt, eq } from "drizzle-orm";
const q = db.select().from(users).where(
and(gt(users.age, 18), eq(users.isAdmin, false))
);Tri et limitation
orderBy accepte également des références de colonnes typées : vous ne pouvez donc pas trier selon une colonne qui n’existe pas dans la table.
import { desc } from "drizzle-orm";
await db.select().from(users).orderBy(desc(users.age)).limit(10);Fonctionnement du rejet
Le constructeur est générique par rapport au type de la table. Les signatures de where et select n’acceptent que des valeurs de type Column<TTable>, si bien que le compilateur rejette structurellement toute autre valeur.
// Conceptual signature
declare function select<T>(
table: T,
cols: { [k: string]: ColumnOf<T> }
): Query;Les insertions sont également typées
Les valeurs d’insert sont vérifiées par rapport au modèle d’insertion. Les champs obligatoires manquants ou les valeurs du mauvais type provoquent des erreurs de compilation avant toute exécution de SQL.
await db.insert(users).values({
name: "Ada",
isAdmin: false,
// missing fields would error; extra unknown keys error too
});Pourquoi est-ce utile
La plupart des erreurs des ORM viennent d’une colonne renommée ou mal typée, découverte uniquement à l’exécution. Un constructeur sûr du point de vue des types transforme ces erreurs en soulignements rouges dans votre éditeur, bien avant le déploiement.
Vérification rapide
Vérifiez votre compréhension de la construction de requêtes sûres du point de vue des types.
Récapitulatif
La construction de requêtes sûre du point de vue des types utilise des références de colonnes typées plutôt que des chaînes. Les colonnes inconnues, les opérandes du mauvais type et les colonnes de tables absentes de la clause FROM deviennent tous des erreurs de compilation. Le constructeur est générique par rapport à la table, de sorte que le système de types impose structurellement la validité.
Questions Fréquemment Posées
La leçon « Construction de requêtes sûre du point de vue du typage » est-elle gratuite ?
Oui — le texte complet de « Construction de requêtes sûre du point de vue du typage » 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 « Construction de requêtes sûre du point de vue du typage » ?
Créer des requêtes qui rejettent les colonnes invalides à la compilation. 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 2 sur 4.
Combien de temps prend la leçon « Construction de requêtes sûre du point de vue du typage » ?
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
- Correspondance entre schéma et type
- Construction de requêtes sûre du point de vue du typage
- Inférer la structure des résultats de requêtes
- Relations et jointures avec les types