Первый пример валидации

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

Первый пример обычно опирается на проверку простого объекта, содержащего строки и числа. Такой сценарий позволяет рассмотреть базовые функции: string, number, object, а также механизм вызова валидации.

Подключение базовых структур

Для начала используются основные типы:

import { object, string, number, validate } from "superstruct";

Каждый импортированный элемент выполняет строго определённую функцию:

  • string — проверка строкового значения
  • number — проверка числового значения
  • object — описание структуры объекта
  • validate — выполнение проверки с возвратом результата

Описание структуры данных

Рассматривается типичный объект пользователя, содержащий имя и возраст:

const User = object({
  name: string(),
  age: number(),
});

В данном описании фиксируется строгая форма данных:

  • поле name должно быть строкой
  • поле age должно быть числом

Любое отклонение от этих условий приводит к ошибке валидации.

Выполнение первой проверки

Для проверки данных используется функция validate, которая возвращает кортеж: результат и возможную ошибку.

const data = {
  name: "Alex",
  age: 25,
};

const [error, result] = validate(data, User);

Результат интерпретируется следующим образом:

  • при корректных данных error равен undefined, а result содержит проверенный объект
  • при некорректных данных error содержит информацию о нарушении структуры

Обработка некорректных значений

При передаче данных, не соответствующих схеме, поведение становится детерминированным:

const data = {
  name: "Alex",
  age: "25",
};

const [error, result] = validate(data, User);

Здесь поле age имеет строковый тип вместо числового. В результате:

  • проверка завершается с ошибкой
  • result не считается валидным объектом

Использование строгой проверки через assert

Помимо validate, применяется функция assert, которая выбрасывает исключение при несоответствии структуры:

import { assert } from "superstruct";

assert(data, User);

Механика работы отличается:

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

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

Проверка через is

Для ситуаций, где требуется только логическое подтверждение корректности, применяется is:

import { is } from "superstruct";

const result = is(data, User);

Возвращаемое значение:

  • true при соответствии структуры
  • false при любом отклонении

Особенности первого уровня валидации

На базовом уровне Superstruct опирается на прямое соответствие типов. Валидация не выполняет автоматического преобразования значений, если не задано дополнительное поведение.

Ключевые характеристики:

  • строгая типизация входных данных
  • явное описание структуры
  • отсутствие скрытых преобразований
  • детерминированный результат проверки

Такой подход формирует основу для построения более сложных схем, включающих вложенные объекты, массивы, условия и кастомные правила.