TypeScript Academy · Leçon

Validation de schémas avec zod et inférence vers TS

Validez les requêtes avec zod ; déduisez les types TypeScript à partir des schémas ; ajoutez un middleware et une gestion des erreurs sûrs.

Leçon 2 sur 38 étapes

Validation de schémas avec zod et inférence vers TS est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 3 leçons au total.

Introduction

Objectif : validez les données entrantes avec zod et maintenez les types TypeScript synchronisés grâce à z.infer. Vous analyserez les données en toute sécurité, enverrez des erreurs utiles et intégrerez la validation dans un intergiciel.

  • Définissez les schémas une seule fois
  • Déduisez les types TS
  • safeParse et erreurs 400

Schéma et déduction

Modélisez une seule fois avec zod. Le type User = z.infer<typeof userSchema> dérivé reproduit exactement la validation.

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 dans le gestionnaire

Utilisez safeParse pour éviter les exceptions ; renvoyez 400 avec les problèmes mis en forme. Le type de réponse reflète les formes de réussite et d’erreur.

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)
}

Assistant d’intergiciel

Créez un intergiciel réutilisable. Il analyse le body et ajoute les données typées, ou renvoie une erreur 400 accompagnée de détails.

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()
  }
}

Coercition et affinement

Utilisez z.coerce pour accepter les nombres sous forme de chaînes, z.enum pour les valeurs connues et .refine pour les règles entre champs.

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

Conseils sur les erreurs

Conseils sur les erreurs :

  • Utilisez toujours safeParse à la frontière de l’application.
  • Mettez les problèmes en forme pour les clients ; évitez de divulguer les traces de pile.
  • Réduisez unknown à ZodError si vous interceptez des analyses qui lèvent une exception.

Vérification de l’inférence avec zod

Vérification rapide : comment garder les types TS synchronisés avec les schémas zod ?

Récapitulatif

Récapitulatif : définissez un seul schéma, inférez le type TS, validez avec safeParse et branchez-le à l’intergiciel pour obtenir des erreurs 400 cohérentes.

Gratuit pour commencer

Apprends TypeScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
101
Leçons
352

Questions Fréquemment Posées

La leçon « Validation de schémas avec zod et inférence vers TS » est-elle gratuite ?

Oui — le texte complet de « Validation de schémas avec zod et inférence vers TS » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Validation de schémas avec zod et inférence vers TS » ?

Validez les requêtes avec zod ; déduisez les types TypeScript à partir des schémas ; ajoutez un middleware et une gestion des erreurs sûrs. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer TypeScript Academy ?

Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Validation de schémas avec zod et inférence vers TS » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?

Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Types des gestionnaires de route et de Request/Response
  2. Validation de schémas avec zod et inférence vers TS
  3. Middleware d’erreurs et types Result
← Retour à TypeScript Academy