Перейти к содержимому

5. Валидация с Zod

Валидация входных данных — критически важная часть любого API. tRPC нативно интегрируется с Zod — мощной библиотекой для декларативной валидации и вывода TypeScript-типов.

Zod — это TypeScript-first библиотека для валидации данных. Вы описываете схему данных, а Zod автоматически выводит TypeScript-тип из неё. Это означает: одна схема — и для валидации, и для типизации.

Метод .input() принимает Zod-схему и делает две вещи: первое — валидирует входные данные при каждом запросе (если данные невалидны, tRPC автоматически вернёт ошибку BAD_REQUEST); второе — TypeScript автоматически типизирует input в обработчике процедуры.

Наиболее часто используемые Zod-валидаторы: z.string(), z.number(), z.boolean(), z.object(), z.array(), z.enum(). Каждый из них поддерживает уточнения: .min(), .max(), .email(), .optional(), .default().

Zod поддерживает вложенные объекты, массивы, объединения типов (z.union()) и пересечения (z.intersection()). Для создания опциональных полей используйте .optional(), для полей со значением по умолчанию — .default().

Используйте z.infer<typeof schema> для получения TypeScript-типа из Zod-схемы. Это позволяет переиспользовать тип в других местах кода без дублирования.