Zod je typově bezpečná validační knihovna pro JS / TS ekosystém. Je navržena tak, aby dokonale zapadala do TypeScriptu — bez duplikace typů, bez boilerplate a s intuitivním API.
Na rozdíl od starších validátorů jako Joi nebo Yup, Zod vyniká přímým spojením validace s typováním. Když definuješ schéma, automaticky z něj získáš i TypeScript typ. Žádné as, žádné manuální definice.
Základní použití
import { z } from 'zod';
const User = z.object({
name: z.string(),
age: z.number().int().positive(),
});
const objectToTest = { name: 'Anna', age: 30 };
const result = User.safeParse(objectToTest);
if (!result.success) {
console.error(result.error.format());
} else {
// data je automaticky typované
const data = result.data;
console.log(data.name.toUpperCase());
}
z.object(...)definuje tvar objektusafeParse()vrací výsledek s rozlišením na success a error- uvnitř result.data už máš typovaná data
Proč Zod?
- zajišťuje validaci runtime dat
- žádné závislosti
- z validace automaticky získáš TypeScript typ
- zamezuje duplikaci: píšeš schéma jen jednou
- hodí se pro API, formuláře, externí data nebo konfigurace
- immutable API: metody vrací novou instanci objektu
- široký ekosystém nástrojů a odvozených knihoven
- funguje v Node.js i v moderních prohlížečích (= frontend i backend)
- malá velikost (2kb core bundle ve verzi v4)
Pokročilé možnosti
Extrakce TS type ze schémata
const Player = z.object({
username: z.string(),
xp: z.number()
});
// extract the inferred type
type Player = z.infer<typeof Player>;
// use it in your code
const player: Player = { username: "billie", xp: 100 };Volitelné a defaultní hodnoty
const Schema = z.object({
isActive: z.boolean().optional().default(true),
});Enumy
const Role = z.enum(['admin', 'user', 'guest']);Validace polí
const Tags = z.array(z.string().min(2));Union typy
const Payload = z.union([
z.object({ type: z.literal('text'), value: z.string() }),
z.object({ type: z.literal('image'), url: z.string().url() }),
]);Transformace
const Email = z.string().email().transform(str => str.toLowerCase());
const result = Email.parse('USER@EMAIL.COM'); // 'user@email.com'Integrace s frontendem
Zod se výborně doplňuje s:
- React Hook Form (resolver)
- TanStack Form / TanStack Query (validace API odpovědí)
- Next.js (validace route params a server-side props)
- TRPC (schéma jako typ i validátor)
- tools pro všechny AI modely
Příklad: validace vstupu z formuláře
const ContactFormSchema = z.object({
email: z.string().email(),
message: z.string().min(10),
});
// Na serveru:
export function handleForm(data: unknown) {
const parsed = ContactFormSchema.safeParse(data);
if (!parsed.success) return { error: parsed.error.flatten() };
// parsed.data je správné a typované
sendEmail(parsed.data);
}
// Na frontendu můžeš udělat to samé nebo použít něco jako React Hook Form (integrace se Zod)
Shrnutí
Zod je moderní, výkonná a minimalistická validační knihovna navržená s důrazem na typovou bezpečnost. Eliminuje duplikaci typů, snadno se integruje do různých prostředí a zjednodušuje validaci runtime dat v TypeScriptu.