TypeScript Academy · Lektion

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.

Lektion 2 av 38 steg

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 tests

safeParse 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 rules

Tips om fel

Tips om fel:

  • Använd alltid safeParse vid systemets gräns.
  • Formatera fel för klienter; undvik att läcka stacktraces.
  • Begränsa unknown till ZodError om 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.

Gratis att börja

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

  1. Routerhanterare och Request/Response-typning
  2. Schemavalidering med zod och inferens till TS
  3. Felmiddleware och Result-typer
← Tillbaka till TypeScript Academy