0Pricing
TypeScript Academy · Lección

Esquemas de zod/valibot e inferencia

Valide datos no confiables con esquemas; infiera tipos de TS directamente desde los validadores; compare zod y valibot e intégralos en los handlers.

Esquemas de zod/valibot e inferencia es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 de 2. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 2 lecciones en total.

Introducción

Objetivo: tratar la entrada externa como unknown, validarla con un esquema e inferir los tipos de TS a partir de ese esquema. Usará zod, verá la sintaxis de valibot y creará un pequeño ayudante para los manejadores.

  • Una única fuente de verdad
  • safeParse frente a parse
  • Reutilización de tipos inferidos

Inferencia con zod

Defina un esquema una sola vez. type User = z.infer<typeof userSchema> refleja exactamente las reglas de validación.

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 frente a parse

safeParse proporciona un resultado de éxito o de fallo sin lanzar excepciones, por lo que es perfecto para los manejadores HTTP; parse lanza una excepción cuando la entrada no es válida.

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

Inferencia con valibot

valibot ofrece un validador compacto con Infer<typeof schema>. Elija una biblioteca y estandarícela en todo el equipo.

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.

Ayudante de validación

Envuelva el análisis en un pequeño ayudante para que los manejadores reciban una estructura sencilla de { ok,data } frente 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 }
}

Consejos

Consejos:

  • Mantenga los esquemas cerca de la frontera (HTTP, CLI, DB IO).
  • Infiera los tipos y expórtelos; evite duplicados escritos manualmente.
  • Devuelva 400 con los detalles de los problemas; no confíe nunca en la entrada del cliente.

Comprobación del beneficio de la inferencia

Comprobación rápida: ¿Por qué inferir los tipos a partir de los esquemas?

Resumen

Resumen: Valide la entrada unknown con zod/valibot, use safeParse e infiera los tipos para mantener alineados los tipos en tiempo de compilación y en tiempo de ejecución.

Preguntas frecuentes

¿La lección «Esquemas de zod/valibot e inferencia» es gratis?

Sí — el texto completo de «Esquemas de zod/valibot e inferencia» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 2 lecciones en total.

¿Qué aprenderé en «Esquemas de zod/valibot e inferencia»?

Valide datos no confiables con esquemas; infiera tipos de TS directamente desde los validadores; compare zod y valibot e intégralos en los handlers. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 2.

¿Cuánto tiempo toma la lección «Esquemas de zod/valibot e inferencia»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Esquemas de zod/valibot e inferencia
  2. Análisis defensivo y envoltorios de errores
← Volver a TypeScript Academy