Spec-Zone.ru › Valibot

Пересечения

Пересечение представляет собой отношение логического И. Вы можете применять эту концепцию к своим схемам с помощью 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API