Back

Как проверять данные в TypeScript с помощью Zod (с примерами)

Как проверять данные в TypeScript с помощью Zod (с примерами)

Проверка данных во время выполнения — распространенная задача для разработчиков TypeScript. Хотя TypeScript обнаруживает ошибки во время компиляции, он не обеспечивает типобезопасность во время выполнения кода. Это означает, что внешние данные, такие как ответы API или пользовательский ввод, могут вызвать непредвиденные ошибки во время выполнения. Zod — это библиотека проверки схем, ориентированная на TypeScript, которая решает эту проблему, проверяя данные на соответствие определенным схемам во время выполнения.

В этой статье вы узнаете, как эффективно использовать Zod: от базового использования до продвинутых методов валидации, сравнения с другими библиотеками и лучших практик интеграции в ваши приложения.

Ключевые моменты

  • Zod эффективно проверяет данные во время выполнения с помощью определений схем.
  • Автоматический вывод типов уменьшает ручное дублирование типов.
  • Идеально подходит для ответов API, валидации форм и переменных окружения.
  • Предлагает четкую обработку ошибок и подробную обратную связь.

Почему стоит использовать Zod для валидации в TypeScript?

Традиционные методы валидации требуют обширного шаблонного кода с ручными проверками. Типы TypeScript исчезают во время выполнения, оставляя потенциальные проблемы непроверенными. Zod решает эти проблемы, предлагая:

  • Декларативные определения схем
  • Автоматическую валидацию во время выполнения
  • Прямой вывод типов TypeScript из схем

Zod значительно сокращает шаблонный код, обеспечивая последовательную проверку данных во всем приложении.

Начало работы с Zod

Установите Zod через npm:

npm install zod

Вот простой пример:

import { z } from 'zod';

const nameSchema = z.string();

nameSchema.parse('Alice'); // возвращает 'Alice'
nameSchema.parse(42); // выбрасывает ZodError

Аналогичным образом можно проверять числа, логические значения и применять ограничения, такие как минимальная или максимальная длина или значения.

Продвинутые методы валидации Zod

Проверка сложных структур

Zod может легко проверять вложенные объекты и массивы:

const userSchema = z.object({
  name: z.string(),
  age: z.number().min(0),
  email: z.string().email().optional()
});

Опциональные и обнуляемые значения

Используйте .optional() для опциональных полей и .nullable() для полей, которые могут явно принимать значения null.

Пользовательские сообщения об ошибках

Повысьте ясность, указав пользовательские сообщения об ошибках:

z.string().min(5, "Имя слишком короткое");

Объединения и пересечения

Комбинируйте схемы для сложных сценариев:

const schema = z.union([z.string(), z.number()]);

Сравнение Zod с другими библиотеками валидации

Zod уникально предлагает встроенный вывод типов TypeScript по сравнению с библиотеками, такими как Yup и Joi, что делает его идеальным для рабочих процессов, ориентированных на TypeScript. В отличие от Yup и Joi, Zod уменьшает дублирование между определениями схем и типов.

Использование Zod в реальных приложениях

Валидация ответов API

Надежная проверка входящих данных:

const responseSchema = z.object({ data: z.array(z.string()) });
const result = responseSchema.safeParse(apiResponse);

Валидация форм в React

Используйте Zod с библиотеками, такими как React Hook Form, для бесшовной обработки и валидации форм.

Проверка переменных окружения

Защитите конфигурацию вашего приложения:

const envSchema = z.object({ API_URL: z.string().url(), PORT: z.number() });
envSchema.parse(process.env);

Распространенные ошибки и лучшие практики

  • Избегайте усложнения схем: Делайте схемы модульными и многоразовыми.
  • Разумно выбирайте между .safeParse и .parse: Используйте .parse, когда предпочитаете исключения, и .safeParse, когда явно обрабатываете ошибки.
  • Правильно обрабатывайте ошибки валидации: Всегда используйте подробные сообщения об ошибках, предоставляемые Zod.

Заключение

Zod устраняет разрыв между валидацией TypeScript во время компиляции и во время выполнения, обеспечивая точность и надежность ваших данных. С Zod логика валидации становится лаконичной, управляемой и напрямую интегрированной с системой типов TypeScript, значительно повышая надежность вашего приложения.

Часто задаваемые вопросы

Да, Zod легко интегрируется с Express для проверки тел запросов, параметров запросов и маршрутов.

Zod обычно предпочтительнее в проектах TypeScript благодаря автоматическому выводу типов и уменьшению шаблонного кода.

Zod предлагает методы `.parseAsync()` и `.safeParseAsync()` для удобной обработки асинхронных валидаций.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers