Spec-Zone.ru › Valibot

Объединения

Объединение представляет собой отношение логического ИЛИ. Вы можете применить эту концепцию к своим схемам с помощью union и variant. Для размеченных объединений используйте variant, а во всех остальных случаях — union.

Схема объединения

Функция схемы union создает отношение ИЛИ между любым количеством схем, переданных в качестве первого аргумента в виде массива. При проверке схема возвращает результат первой успешно прошедшей проверку схемы.

import * as v from 'valibot';

// TypeScript
type Union = string | number;

// Valibot
const UnionSchema = v.union([v.string(), v.number()]);

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

Следующие ошибки возвращаются, если вместо строки или числа передано значение null. Поскольку в этом случае входные данные нельзя сопоставить со схемой, ошибки обеих схем возвращаются в качестве вложенных ошибок.

[
  {
    kind: 'schema',
    type: 'union',
    input: null,
    expected: 'string | number',
    received: 'null',
    message: 'Invalid type: Expected string | number but received null',
    issues: [
      {
        kind: 'schema',
        type: 'string',
        input: null,
        expected: 'string',
        received: 'null',
        message: 'Invalid type: Expected string but received null',
      },
      {
        kind: 'schema',
        type: 'number',
        input: null,
        expected: 'number',
        received: 'null',
        message: 'Invalid type: Expected number but received null',
      },
    ],
  },
];

Схема варианта

Для повышения производительности, большей безопасности типов и более точного вывода ошибок для размеченных объединений можно использовать variant. Поэтому мы рекомендуем по возможности использовать variant вместо union. Размеченное объединение — это отношение ИЛИ между объектами, которые можно различить по определенному ключу.

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

import * as v from 'valibot';

const VariantScheme = v.variant('type', [
  v.object({
    type: v.literal('foo'),
    foo: v.string(),
  }),
  v.object({
    type: v.literal('bar'),
    bar: v.number(),
  }),
]);

Для очень сложных наборов данных несколько схем variant также можно глубоко вкладывать друг в друга.

© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/guides/unions/

Spec-Zone.ru

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