💻 Exemplos: Capítulo 11: Validação de Esquemas de Formulários com Zod
Especialização Frontend com React & TypeScript • Demonstrações Práticas Executáveis
🎯 Contexto e Objetivo Prático
Integração do React Hook Form com Zod Resolver, tipagem estática inferida e regras de refinamento entre múltiplos campos.
💻 Código Fonte React 19 (TSX)
// UserRegisterSchema.ts
import { z } from "zod";
export const RegisterUserSchema = z
.object({
username: z.string().min(4, "Nome de usuário deve ter pelo menos 4 caracteres"),
email: z.string().email("Formato de email corporativo inválido"),
password: z.string().min(8, "Senha deve ter no mínimo 8 caracteres"),
confirmPassword: z.string().min(1, "Confirmação de senha é obrigatória"),
age: z.coerce.number().min(18, "O colaborador deve ser maior de 18 anos")
})
.refine(data => data.password === data.confirmPassword, {
message: "As senhas não coincidem",
path: ["confirmPassword"]
});
export type RegisterUserInput = z.infer<typeof RegisterUserSchema>;
// No Componente React (com @hookform/resolvers/zod):
/*
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
export function RegisterUserForm() {
const { register, handleSubmit, formState: { errors } } = useForm<RegisterUserInput>({
resolver: zodResolver(RegisterUserSchema)
});
// Validação em runtime automática sincronizada com o tipo TS!
}
*/
🖥️ Saída de Renderização Visual e Comportamento
[Validação Zod Integrada]
Entrada: { password: "segredo123", confirmPassword: "outro" }
Erro Gerado no Path confirmPassword: "As senhas não coincidem"
Tipo TypeScript garantido: RegisterUserInput