Typsichere Query-Erstellung
Erstellen Sie Queries, die ungültige Spalten bereits zur Compile-Zeit ablehnen.
Typsichere Query-Erstellung ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Abfragen, die nicht auf unbekannte Spalten verweisen können
Ein typsicherer Abfrage-Builder weist Spaltennamen, die in der Tabelle nicht existieren, zur Kompilierungszeit zurück. Sie referenzieren Spalten über typisierte Objekte statt über einfache Zeichenfolgen.
Typisierte Spaltenreferenzen
Nach der Definition einer Tabelle ist jede Spalte eine Eigenschaft des Tabellenobjekts. An Filter und Selects übergeben Sie diese Eigenschaften, nicht Zeichenfolgen.
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));Unbekannte Spalte = Kompilierungsfehler
Da Spalten echte Eigenschaften sind, wird ein Tippfehler sofort erkannt. Es gibt keinen Ausweg über untypisierte Zeichenfolgen.
await db.select().from(users).where(eq(users.idd, 1));
// ^^^^
// Error: Property "idd" does not exist on the users table.Typisierte Vergleichsoperanden
Operatoren wie eq sind generisch über den Spaltentyp. Eine Zahlenspalte mit einer Zeichenfolge zu vergleichen, ist ein Typfehler.
eq(users.age, 30); // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to numberBestimmte Spalten auswählen
Übergeben Sie ein Objekt, dessen Werte Spaltenreferenzen sind, um eine Teilmenge zu projizieren. Die von Ihnen gewählten Schlüssel werden zu den Ergebnisschlüsseln.
const partial = await db
.select({ id: users.id, name: users.name })
.from(users);
// result rows: { id: number; name: string }[]Spalten aus anderen Tabellen zurückweisen
Die Select-Abbildung ist auf Spalten der abgefragten Tabelle(n) beschränkt. Die Referenzierung einer Spalte aus einer nicht verwandten Tabelle führt zu einem Kompilierungsfehler.
await db
.select({ title: posts.title }) // posts not in this query
.from(users);
// Error: posts.title is not part of the FROM clause.Kombinierbare Bedingungen
Bedingungen lassen sich mit and, or und not kombinieren. Jede Teilbedingung bleibt typisiert, sodass eine fehlerhafte Bedingung selbst tief in einem Baum erkannt wird.
import { and, gt, eq } from "drizzle-orm";
const q = db.select().from(users).where(
and(gt(users.age, 18), eq(users.isAdmin, false))
);Sortieren und begrenzen
orderBy akzeptiert ebenfalls typisierte Spaltenreferenzen. Daher können Sie nicht nach einer Spalte sortieren, die in der Tabelle nicht vorhanden ist.
import { desc } from "drizzle-orm";
await db.select().from(users).orderBy(desc(users.age)).limit(10);So funktioniert die Zurückweisung
Der Builder ist generisch über den Tabellentyp. Die Signaturen von where und select akzeptieren nur Werte vom Typ Column<TTable>, sodass der Compiler alles andere strukturell zurückweist.
// Conceptual signature
declare function select<T>(
table: T,
cols: { [k: string]: ColumnOf<T> }
): Query;Auch Inserts sind typisiert
Einfügewerte werden anhand des Insert-Modells geprüft. Fehlende erforderliche Felder oder falsche Werttypen führen zu Kompilierungsfehlern, bevor SQL ausgeführt wird.
await db.insert(users).values({
name: "Ada",
isAdmin: false,
// missing fields would error; extra unknown keys error too
});Warum das hilft
Die meisten ORM-Fehler entstehen durch eine umbenannte oder falsch geschriebene Spalte, die erst zur Laufzeit entdeckt wird. Ein typsicherer Builder macht daraus rote Wellenlinien in Ihrem Editor – lange vor der Bereitstellung.
Kurzer Check
Überprüfen Sie Ihr Verständnis der typsicheren Abfragekonstruktion.
Zusammenfassung
Die typsichere Abfragekonstruktion verwendet typisierte Spaltenreferenzen statt Zeichenfolgen. Unbekannte Spalten, falsche Operandentypen und Spalten aus Tabellen, die nicht in der FROM-Klausel enthalten sind, werden zu Kompilierungsfehlern. Der Builder ist generisch über die Tabelle, sodass das Typsystem die Gültigkeit strukturell erzwingt.
Häufig gestellte Fragen
Ist die Lektion „Typsichere Query-Erstellung“ kostenlos?
Ja — der vollständige Text von „Typsichere Query-Erstellung“ 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 „Typsichere Query-Erstellung“?
Erstellen Sie Queries, die ungültige Spalten bereits zur Compile-Zeit ablehnen. 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 2 von 4.
Wie lange dauert die Lektion „Typsichere Query-Erstellung“?
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
- Schema-zu-Typ-Zuordnung
- Typsichere Query-Erstellung
- Strukturen von Query-Ergebnissen ableiten
- Relationen und Joins mit Typen