Что такое Zod?
Zod — это библиотека для декларативной валидации и парсинга данных, написанная на TypeScript. Она позволяет описывать схемы данных (схемы — это строгие описания типов) и проверять соответствие им любых объектов, строк, чисел и т.д. Главная особенность Zod — полная интеграция с TypeScript: на основе схемы автоматически выводятся типы, что избавляет от дублирования определений.
Зачем нужна валидация данных?
В реальных приложениях данные часто приходят из внешних источников (API, формы, файлы конфигурации, localStorage). Без валидации легко получить баги, XSS-атаки или неожиданное поведение. Zod гарантирует, что данные соответствуют ожидаемой структуре, и выбрасывает понятные ошибки, если что-то не так.
Установка
npm install zodБиблиотека не требует дополнительных настроек и работает как в Node.js, так и в браузере (с bundler).
Основные функции
- Создание схем:
z.string(),z.number(),z.object(),z.array()и т.д. - Парсинг и валидация: метод
.parse()возвращает данные или кидает ошибку;.safeParse()возвращает объект с полями success/data/error. - Трансформация:
.transform()позволяет изменять данные после успешной проверки. - Refine: кастомные проверки с помощью
.refine(). - Вывод типов:
z.infer<typeof schema>генерирует TypeScript-тип.
Пример кода на TypeScript
import { z } from 'zod';
// Определяем схему для пользователя
const UserSchema = z.object({
id: z.number().int().positive(),
name: z.string().min(2).max(50),
email: z.string().email(),
age: z.number().min(18).max(120).optional(),
role: z.enum(['admin', 'user', 'guest'])
});
// Выводим тип на основе схемы
type User = z.infer<typeof UserSchema>;
// Используем safeParse для безопасной валидации
const rawData = {
id: 1,
name: 'Анна',
email: 'anna@example.com',
age: 25,
role: 'admin'
};
const result = UserSchema.safeParse(rawData);
if (result.success) {
console.log('Данные валидны:', result.data);
} else {
console.error('Ошибки:', result.error.errors);
}
Когда использовать Zod
Zod идеально подходит для:
- Валидации входных данных API (например, в Express или Next.js).
- Проверки данных из форм на клиенте и сервере.
- Парсинга переменных окружения (
dotenv+ Zod). - Работы с конфигурационными файлами (JSON/YAML).
- Создания строгих типов для динамических данных.
Благодаря полной поддержке TypeScript, Zod делает код безопаснее и читаемее, исключая рассинхронизацию между типами и реальными данными.