Пересечения
Пересечение представляет собой отношение логического И. Вы можете применять эту концепцию к своим схемам с помощью intersect и частично — объединяя несколько схем объектов в одну новую. Мы рекомендуем такой подход для простых схем объектов, а intersect — во всех остальных случаях.
Схема пересечения
Функция схемы intersect создает отношение И между любым количеством схем, переданных первым аргументом в виде массива. Для успешного прохождения проверки необходимо, чтобы проверка каждой переданной схемы завершилась успешно. В этом случае схема объединяет результаты отдельных схем и возвращает результат. Если проверка не пройдена, схема возвращает все возникшие ошибки.
import * as v from 'valibot';
// TypeScript
type Intersect = { foo: string } & { bar: number };
// Valibot
const IntersectSchema = v.intersect([
v.object({ foo: v.string() }),
v.object({ bar: v.number() }),
]);
Объединение объектов
Технически между intersect и объединением объектов есть большая разница. intersect — это функция схемы, которая выполняет переданные схемы во время проверки. В отличие от этого, объединение объектов выполняется во время инициализации для создания новой схемы объекта.
В результате объединение объектов обычно обеспечивает гораздо более высокую производительность, чем intersect, при проверке неизвестных данных. Кроме того, свойства последующего объекта перезаписывают предыдущие. Это не относится к intersect, поскольку проверка завершится ошибкой, если два свойства с одинаковым именем принципиально различаются.
import * as v from 'valibot';
const ObjectSchema1 = v.object({ foo: v.string(), baz: v.number() });
const ObjectSchema2 = v.object({ bar: v.string(), baz: v.boolean() });
const MergedSchema = v.object({
...ObjectSchema1.entries,
...ObjectSchema2.entries,
}); // { foo: string; bar: string; baz: boolean }
В предыдущем примере кода свойство baz первой схемы объекта перезаписывается свойством baz второй схемы объекта.
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/guides/intersections/