0Pricing
TypeScript Academy · Lezione

Schemi zod/valibot + inferenza

Validi i dati non attendibili con gli schemi; deduca i tipi TS direttamente dai validatori; confronti zod e valibot e li integri nei gestori.

Schemi zod/valibot + inferenza è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 1 di 2. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 2 lezioni in totale.

Introduzione

Obiettivo: considerare l'input esterno come unknown, convalidarlo con uno schema e inferire i tipi TS da quello schema. Userà zod, vedrà la sintassi di valibot e creerà un piccolo helper per gli handler.

  • Un'unica fonte di verità
  • safeParse rispetto a parse
  • Riutilizzare i tipi inferiti

Inferenza con zod

Definisca uno schema una sola volta. type User = z.infer<typeof userSchema> rispecchia esattamente le regole di convalida.

import { z } from "zod"

export const userSchema = z.object({
  id: z.string().uuid(),
  name: z.string().min(1),
  age: z.number().int().min(0).optional()
})

export type User = z.infer<typeof userSchema>

// User is kept in sync with runtime rules.

safeParse rispetto a parse

safeParse restituisce un risultato di successo o di errore senza lanciare eccezioni, perfetto per gli handler HTTP; parse lancia un'eccezione quando l'input non è valido.

import type { Request, Response } from "express"
import { userSchema, type User } from "./schema"

export function createUser(req: Request, res: Response<User | { error: string; issues?: unknown }>) {
  const r = userSchema.safeParse(req.body)
  if (!r.success) {
    return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
  }
  const user = r.data
  return res.status(201).json(user)
}

// parse() throws; safeParse() returns a discriminated union

Inferenza con valibot

valibot offre un validatore compatto con Infer<typeof schema>. Scelga una libreria e adotti uno standard condiviso dal team.

import { object, string, number, optional, minLength, uuid, minValue } from "valibot"
import type { Infer } from "valibot"

export const VUser = object({
  id: string([uuid()]),
  name: string([minLength(1)]),
  age: optional(number([minValue(0)]))
})

export type VUserT = Infer<typeof VUser>

// Similar idea: one schema, inferred type.

Helper di convalida

Racchiuda il parsing in un piccolo helper, così gli handler ricevono una semplice struttura { ok,data } rispetto a { ok:false,issues }.

import { ZodTypeAny } from "zod"

export function validate<T extends ZodTypeAny, Out = unknown>(schema: T, value: unknown, onError?: (issues: unknown) => never | void): { ok: true; data: Out } | { ok: false; issues: unknown } {
  const r = schema.safeParse(value)
  if (!r.success) {
    const issues = r.error.format()
    if (onError) onError(issues as unknown as never)
    return { ok: false, issues }
  }
  return { ok: true, data: r.data as unknown as Out }
}

Suggerimenti

Suggerimenti:

  • Mantenga gli schemi vicino al confine (HTTP, CLI, operazioni di I/O sul DB).
  • Inferisca i tipi ed esporti quelli inferiti, evitando duplicati scritti a mano.
  • Restituisca 400 con i dettagli dei problemi; non si fidi mai dell'input del client.

Verifica dei vantaggi dell'inferenza

Verifica rapida: perché inferire i tipi dagli schemi?

Riepilogo

Riepilogo: convalidi l'input unknown con zod/valibot, usi safeParse e inferisca i tipi per mantenere allineati i controlli in fase di compilazione e a runtime.

Domande Frequenti

La lezione «Schemi zod/valibot + inferenza» è gratuita?

Sì — il testo completo di «Schemi zod/valibot + inferenza» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 2 lezioni in totale.

Cosa imparerò in «Schemi zod/valibot + inferenza»?

Validi i dati non attendibili con gli schemi; deduca i tipi TS direttamente dai validatori; confronti zod e valibot e li integri nei gestori. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 2.

Quanto tempo richiede la lezione «Schemi zod/valibot + inferenza»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Schemi zod/valibot + inferenza
  2. Parsing difensivo e buste degli errori
← Torna a TypeScript Academy