Schemavalidering med zod och inferens till TS
Validera förfrågningar med zod, härled TypeScript-typer från scheman och lägg till säker middleware och felhantering.
Schemavalidering med zod och inferens till TS är en gratis lektion i TypeScript Academy på CoddyKit. Detta är lektion 2 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för TypeScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i TypeScript Academy innehåller totalt 3 lektioner.
Introduktion
Mål: Validera inkommande data med zod och håll TypeScript-typerna synkroniserade via z.infer. Du parsar säkert, skickar hjälpsamma fel och kopplar valideringen till middleware.
- Definiera scheman en gång
- Härled TS-typer
- safeParse och 400-fel
Schema och infer
Modellera en gång med zod. Den härledda typen type User = z.infer<typeof userSchema> speglar valideringen exakt.
import { z } from "zod"
export const userSchema = z.object({
id: z.string().regex(/^u_[a-z0-9]+$/),
name: z.string().min(1),
age: z.number().int().nonnegative().optional()
})
export type User = z.infer<typeof userSchema>
// Reuse `User` across handlers, services, and testssafeParse i hanteraren
Använd safeParse för att undvika undantag och returnera 400 med formaterade problem. Svarstypen återspeglar både lyckade svar och felsvar.
import { Request, Response } from "express"
import { userSchema, User } from "./schema"
export function createUser(req: Request<{}, User, unknown>, res: Response<User | { error: string; issues?: unknown }>) {
const parsed = userSchema.safeParse(req.body)
if (!parsed.success) {
return res.status(400).json({ error: "Invalid body", issues: parsed.error.format() })
}
const user = parsed.data
return res.status(201).json(user)
}Middleware-hjälpfunktion
Skapa återanvändbar middleware. Den parsar body och bifogar antingen de typade uppgifterna eller returnerar 400 med detaljer.
import { z } from "zod"
import { Request, Response, NextFunction } from "express"
export function validateBody<T extends z.ZodTypeAny>(schema: T) {
return (req: Request, res: Response, next: NextFunction) => {
const r = schema.safeParse(req.body)
if (!r.success) {
return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
}
req.body = r.data
next()
}
}Coercion och refine
Använd z.coerce för att acceptera tal som strängar, z.enum för kända värden och .refine för regler mellan fält.
import { z } from "zod"
const signupSchema = z.object({
email: z.string().email(),
age: z.coerce.number().int().gte(13),
role: z.enum(["user", "admin"]).default("user")
}).refine(v => v.role !== "admin" || v.age >= 18, { message: "admin must be adult" })
export type Signup = z.infer<typeof signupSchema>
// Coercion allows numbers in strings; refine adds cross-field rulesTips om fel
Tips om fel:
- Använd alltid
safeParsevid systemets gräns. - Formatera fel för klienter; undvik att läcka stacktraces.
- Begränsa
unknowntillZodErrorom du fångar kastade parse-fel.
Kontroll av zod-typinferens
Snabb kontroll: Hur håller du TS-typer synkroniserade med zod-scheman?
Sammanfattning
Sammanfattning: Definiera ett schema, inferera TS-typen, validera med safeParse och koppla in det i middleware för konsekventa 400-fel.
Lär dig TypeScript med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 101
- Lektioner
- 352
Vanliga frågor
Är lektionen ”Schemavalidering med zod och inferens till TS” gratis?
Ja – hela texten till ”Schemavalidering med zod och inferens till TS” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i TypeScript Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i TypeScript Academy innehåller totalt 3 lektioner.
Vad lär jag mig i ”Schemavalidering med zod och inferens till TS”?
Validera förfrågningar med zod, härled TypeScript-typer från scheman och lägg till säker middleware och felhantering. Ni övar på TypeScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig TypeScript Academy?
Du behöver inga förkunskaper. Utbildningen i TypeScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.
Hur lång tid tar lektionen ”Schemavalidering med zod och inferens till TS”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här TypeScript Academy-lektionen?
Ja. Varje TypeScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Routerhanterare och Request/Response-typning
- Schemavalidering med zod och inferens till TS
- Felmiddleware och Result-typer