Zod — мощная библиотека для валидации данных в TypeScript

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое 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 делает код безопаснее и читаемее, исключая рассинхронизацию между типами и реальными данными.

Рекомендаций