Код Senior Реализация с нуля обновлено

Валидация по схеме

Условие

validate(value, schema) возвращает массив ошибок вида { path, message }. Схема: { type, required, min, max, fields, of }. Поддержи 'string', 'number', 'array', 'object'.

Что проверяют тесты

  • валидное значение

  • неверный тип

  • обязательное поле

  • необязательное отсутствующее

  • вложенный объект с путями

  • массив элементов

  • несколько ошибок

Как подойти

Ядро zod, yup и любой схемной валидации. Ключевое решение - возвращать список ошибок с путями, а не первую ошибку или булево: форма должна подсветить все проблемные поля разом. Путь строится по мере спуска, для массивов сегментом служит индекс. Ранний выход после несовпадения типа избавляет от каскада бессмысленных сообщений.

Подсказки: 3
  1. Рекурсия с накоплением пути - так ошибку можно привязать к полю формы.
  2. Массив - это typeof 'object', отличать надо через Array.isArray.
  3. После ошибки типа проверять ограничения бессмысленно - выходи сразу.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.