0Pricing
TypeScript Academy · Lektion

Strukturen von Query-Ergebnissen ableiten

Lassen Sie den Query Builder den Typ der zurückgegebenen Zeile ableiten.

Strukturen von Query-Ergebnissen ableiten ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Der Ergebnistyp folgt der Auswahl

Ein guter Abfrage-Builder prüft nicht nur Eingaben, sondern leitet die genaue Form jeder Ergebniszeile aus den ausgewählten Spalten ab. Wählen Sie weniger Spalten aus, wird der Ergebnistyp enger.

Vollständige Zeilenauswahl

Der Aufruf von select() ohne Projektion gibt den vollständigen Zeilentyp zurück.

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

Eine partielle Auswahl schränkt den Typ ein

Projizieren Sie nur die benötigten Spalten, enthält der Ergebnistyp nur diese Schlüssel.

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.

Spalten im Ergebnis umbenennen

Die Schlüssel des Select-Objekts werden zu den Ergebnisschlüsseln. Sie können Spalten daher beliebig umbenennen, und der Typ bildet die neuen Namen ab.

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

Berechnete und aggregierte Spalten

Aggregationen bringen ihren eigenen abgeleiteten Typ mit. count() liefert eine Zahl; der Alias-Schlüssel benennt sie im Ergebnis.

import { count } from "drizzle-orm";

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

Die Nullbarkeit wird weitergegeben

Wenn Sie eine nullable Spalte auswählen, bleibt ihre Nullbarkeit im Ergebnis erhalten. Die Auswahl von age behält den Typ number | null.

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

So wird die Ableitung erstellt

Der Ergebnistyp ist ein gemappter Typ über dem Select-Objekt: Jeder Wert ist eine Spalte, deren data-Typ (und Nullbarkeit) ausgelesen und dem entsprechenden Schlüssel zugeordnet wird.

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

Hilfsfunktionen für einzelne Zeilen

Einige Builder bieten einen Zugriff über .get() oder [0]. Der Elementtyp wird weiterhin aus derselben Auswahl abgeleitet, lediglich aus dem Array entpackt.

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

Joins erweitern die Form

Bei einem Join erhält der Ergebnistyp Schlüssel der verknüpften Tabelle. Partielle Auswahlen über mehrere verknüpfte Tabellen schränken den Typ weiterhin präzise ein. (Joins werden in einer eigenen Lektion behandelt.)

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 }[]

Warum das Einschränken wichtig ist

Wenn nur die ausgewählten Schlüssel zurückgegeben werden, verhindert das die versehentliche Abhängigkeit von nicht abgerufenen Spalten. Der Typ spiegelt das tatsächliche SQL wider, sodass Fehler durch zu viele oder zu wenige abgerufene Spalten im Editor sichtbar werden.

Stolperfalle: erst verteilen, dann auswählen

Wenn Sie die vollständige Zeile abrufen und anschließend in JavaScript manuell Schlüssel auswählen, verlieren Sie den Vorteil der Einschränkung auf Datenbankebene und übertragen zusätzliche Spalten. Schränken Sie die Auswahl möglichst bereits in der Abfrage ein.

Kurzer Check

Überprüfen Sie Ihr Verständnis der abgeleiteten Ergebnisformen.

Zusammenfassung

Der Ergebnistyp wird aus der Auswahl berechnet, und zwar über einen gemappten Typ: Vollständige Auswahlen geben die gesamte Zeile zurück, partielle Auswahlen werden auf die gewählten Schlüssel eingeschränkt, Umbenennungen ändern die Ergebnisschlüssel, die Nullbarkeit wird weitergegeben und Aggregationen bringen ihre eigenen Typen mit. Der statische Typ spiegelt immer das SQL wider, das Sie tatsächlich geschrieben haben.

Häufig gestellte Fragen

Ist die Lektion „Strukturen von Query-Ergebnissen ableiten“ kostenlos?

Ja — der vollständige Text von „Strukturen von Query-Ergebnissen ableiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Strukturen von Query-Ergebnissen ableiten“?

Lassen Sie den Query Builder den Typ der zurückgegebenen Zeile ableiten. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Strukturen von Query-Ergebnissen ableiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Schema-zu-Typ-Zuordnung
  2. Typsichere Query-Erstellung
  3. Strukturen von Query-Ergebnissen ableiten
  4. Relationen und Joins mit Typen
← Zurück zu TypeScript Academy