Walidacja schematów za pomocą zod i inferencja do TS
Walidowanie żądań za pomocą zod, wyprowadzanie typów TypeScript ze schematów oraz dodawanie bezpiecznego middleware i obsługi błędów
Walidacja schematów za pomocą zod i inferencja do TS to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Wprowadzenie
Cel: Walidować dane wejściowe za pomocą zod i utrzymywać synchronizację typów TypeScript za pomocą z.infer. Będziesz bezpiecznie parsować dane, zwracać pomocne błędy i podłączać walidację do middleware.
- Jednokrotne definiowanie schematów
- Inferowanie typów TS
- safeParse i błędy 400
Schemat i infer
Modeluj dane jednokrotnie za pomocą zod. Pochodny typ type User = z.infer<typeof userSchema> dokładnie odzwierciedla walidację.
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 w handlerze
Użyj safeParse, aby uniknąć wyjątków; zwracaj 400 ze sformatowanymi problemami. Typ odpowiedzi odzwierciedla zarówno kształt sukcesu, jak i błędu.
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)
}Pomocniczy middleware
Utwórz middleware wielokrotnego użytku. Parsuje ono body i albo dołącza typowane dane, albo zwraca 400 ze szczegółami.
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()
}
}Koercja i refine
Należy użyć z.coerce do akceptowania liczb zapisanych jako ciągi znaków, z.enum dla znanych wartości, a .refine dla reguł obejmujących wiele pól.
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 rulesWskazówki dotyczące błędów
Wskazówki dotyczące błędów:
- Na granicy systemu zawsze należy używać
safeParse. - Należy formatować problemy na potrzeby klientów i unikać ujawniania śladów stosu.
- Przy przechwytywaniu rzuconych wyników parsowania należy zawęzić
unknowndoZodError.
Sprawdzenie inferencji zod
Szybkie sprawdzenie: Jak zachować synchronizację typów TS ze schematami zod?
Podsumowanie
Podsumowanie: Należy zdefiniować jeden schemat, wywnioskować typ TS, przeprowadzać walidację za pomocą safeParse i podłączyć schemat do middleware, aby zapewnić spójne błędy 400.
Ucz się TypeScript dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 101
- Lekcje
- 352
Często zadawane pytania
Czy lekcja „Walidacja schematów za pomocą zod i inferencja do TS” jest bezpłatna?
Tak — pełny tekst „Walidacja schematów za pomocą zod i inferencja do TS” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Walidacja schematów za pomocą zod i inferencja do TS”?
Walidowanie żądań za pomocą zod, wyprowadzanie typów TypeScript ze schematów oraz dodawanie bezpiecznego middleware i obsługi błędów Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Walidacja schematów za pomocą zod i inferencja do TS”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typowanie handlerów routera, Request/Response
- Walidacja schematów za pomocą zod i inferencja do TS
- Middleware błędów i typy Result