Zod

· Padrão Frontend
Juan Kalleo
Juan Kalleo
Senior Fullstack
This page hasn't been translated to English yet — showing the original Portuguese content.

O que é

Biblioteca de validação e declaração de schema em TypeScript — você descreve o formato dos dados num objeto (z.object), e o Zod valida qualquer valor contra esse formato e ainda gera o tipo TypeScript correspondente (z.infer).

Por que essa

É a lib de schema do projeto: valida formulário e payloads de API com Zod. O ponto forte é que o schema é a única fonte da verdade: o tipo sai dele, então schema e tipo nunca ficam dessincronizados. Também é a "cola" do React Hook Form (ver React Hook Form + Zod). Leitura de apoio: Zod (docs oficiais) e When should you use Zod? (Matt Pocock) — por que validar na fronteira de confiança e inferir o tipo do schema.

Versão

^4.4.3 (package.json).

Como importar

pnpm add zod
import { z } from "zod";

Exemplo real

Schema de login (features/autenticacao/login/schemas/login.schema.ts):

import { z } from "zod";

export const loginFormSchema = z.object({
  email: z.string().min(1, "Informe o e-mail").email("E-mail inválido"),
  password: z.string().min(1, "Informe a senha"),
});

export type LoginFormValues = z.infer<typeof loginFormSchema>;

Validação cruzada

Confirmação de senha usa .refine() no schema, não validação manual no componente:

export const alterarSenhaSchema = z
  .object({
    password: z.string().min(6, "Mínimo de 6 caracteres"),
    passwordConfirmation: z.string().min(6, "Mínimo de 6 caracteres"),
  })
  .refine((data) => data.password === data.passwordConfirmation, {
    message: "As senhas não conferem",
    path: ["passwordConfirmation"],
  });

Onde usar no projeto

Todo schemas/ dentro de uma feature (login, usuários, configurações) define seus tipos via z.infer; o resolver do formulário e a checagem de payload de services/ passam pelo mesmo schema. Convenção: campos de senha em inglês (password, passwordConfirmation) pro autocomplete do HTML bater.