Typen aus Schemas ableiten
Leiten Sie statische Typen direkt aus Zod-Schemas ab.
Typen aus Schemas ableiten 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.
Schemas enthalten Typinformationen
Ein Zod-Schema kennt den TypeScript-Typ, den es validiert. z.infer leitet diesen Typ ab, sodass Sie die Struktur einmal definieren.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User is { name: string; age: number }Das Hilfsmittel z.infer
z.infer<typeof schema> erzeugt den statischen Typ, den das Schema validiert. Beachten Sie typeof: Sie übergeben den Schema-Wert.
import { z } from "zod";
const tagSchema = z.array(z.string());
type Tags = z.infer<typeof tagSchema>; // string[]Eine einzige Quelle der Wahrheit
Ohne Inferenz müssten Sie einen Typ und ein Schema getrennt pflegen, und beide könnten auseinanderlaufen. z.infer hält sie perfekt synchron.
import { z } from "zod";
const schema = z.object({ id: z.number(), email: z.string() });
type Account = z.infer<typeof schema>;
// Change the schema, the type updates automatically.Verschachtelte Typen inferieren
Die Inferenz unterstützt verschachtelte Objekte und Arrays und erzeugt aus einem einzigen Schema den vollständigen verschachtelten TypeScript-Typ.
import { z } from "zod";
const postSchema = z.object({
title: z.string(),
author: z.object({ name: z.string() }),
tags: z.array(z.string())
});
type Post = z.infer<typeof postSchema>;
// Post.author.name is stringDen inferierten Typ verwenden
Verwenden Sie den inferierten Typ überall dort, wo Sie auch einen handgeschriebenen Typ verwenden würden: bei Funktionsparametern, Variablen und Rückgabetypen.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
function greet(u: User): string {
return "Hi " + u.name;
}Parse gibt den inferierten Typ zurück
schema.parse gibt einen Wert zurück, der bereits als inferierter Typ typisiert ist, sodass der nachgelagerte Code vollständig typisiert bleibt.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
const raw: unknown = { name: "Ada", age: 36 };
const user: User = userSchema.parse(raw); // typed and validatedOptional und nullable im Typ
Schema-Modifikatoren fließen in den inferierten Typ ein. Ein Feld mit .optional() wird in TypeScript optional.
import { z } from "zod";
const schema = z.object({
name: z.string(),
nickname: z.string().optional()
});
type P = z.infer<typeof schema>;
// P is { name: string; nickname?: string }Aus Objekt-Arrays inferieren
Kombinieren Sie z.array und z.object, und der inferierte Typ ist ein Array des Objekttyps.
import { z } from "zod";
const usersSchema = z.array(z.object({ id: z.number() }));
type Users = z.infer<typeof usersSchema>;
// Users is { id: number }[]Warum typeof erforderlich ist
Das Schema ist ein Wert. Daher verweisen Sie mit typeof schema auf dessen Typ, bevor Sie ihn an z.infer übergeben.
import { z } from "zod";
const s = z.string();
type S = z.infer<typeof s>; // string
// z.infer<s> would be wrong: s is a value, not a type.Inferenz über Modulgrenzen hinweg
Exportieren Sie sowohl das Schema als auch seinen inferierten Typ, damit andere Module dieselbe Struktur konsistent validieren und verwenden können.
import { z } from "zod";
export const userSchema = z.object({ name: z.string() });
export type User = z.infer<typeof userSchema>;
// Consumers import both the runtime schema and the type.Eine Definition, zwei Welten
Das Schema dient der Laufzeitvalidierung, z.infer der Typisierung zur Kompilierungszeit. Eine Deklaration ermöglicht beides und beseitigt Doppelungen.
import { z } from "zod";
const configSchema = z.object({ port: z.number(), host: z.string() });
type Config = z.infer<typeof configSchema>;
// Validate at runtime, type at compile time, no drift.Kurzer Check: Typen inferieren
Testen Sie Ihr Verständnis der Inferenz von Typen aus Schemas.
Zusammenfassung: Typen aus Schemas inferieren
Sie haben gelernt, dass z.infer<typeof schema> aus einem Zod-Schema einen TypeScript-Typ ableitet und dadurch eine einzige Quelle der Wahrheit für Validierung und Typen schafft, einschließlich verschachtelter, optionaler und aus Arrays bestehender Strukturen.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User stays in sync with the schema automatically.Häufig gestellte Fragen
Ist die Lektion „Typen aus Schemas ableiten“ kostenlos?
Ja — der vollständige Text von „Typen aus Schemas 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 „Typen aus Schemas ableiten“?
Leiten Sie statische Typen direkt aus Zod-Schemas ab. 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 „Typen aus Schemas 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
- Grundlagen von Zod-Schemas
- Typen aus Schemas ableiten
- parse und safeParse
- Schemas kombinieren und verfeinern