В библиотеке 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 не считается валидным объектомПомимо validate, применяется функция
assert, которая выбрасывает исключение при несоответствии
структуры:
import { assert } from "superstruct";
assert(data, User);
Механика работы отличается:
Такой подход используется в случаях, когда дальнейшая обработка невозможна без валидных данных.
Для ситуаций, где требуется только логическое подтверждение
корректности, применяется is:
import { is } from "superstruct";
const result = is(data, User);
Возвращаемое значение:
true при соответствии структурыfalse при любом отклоненииНа базовом уровне Superstruct опирается на прямое соответствие типов. Валидация не выполняет автоматического преобразования значений, если не задано дополнительное поведение.
Ключевые характеристики:
Такой подход формирует основу для построения более сложных схем, включающих вложенные объекты, массивы, условия и кастомные правила.