На главную

Данные и форматы

JSON в схему Zod

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

Схема Zod

import { z } from 'zod';

export const User = z.array(z.object({
  id: z.number().int(),
  email: z.string().email(),
  site: z.string().url().optional(),
  created: z.string().datetime(),
  rating: z.number(),
  active: z.boolean(),
  profile: z.object({
    city: z.string(),
    age: z.number().int(),
  }),
  tags: z.array(z.string()),
}));

export type User = z.infer<typeof User>;

Схема снята с одного образца: она описывает то, что пришло, а не то, что документировано. Массив из нескольких элементов даёт заметно более честный результат, чем один объект.