Spec-Zone.ru › Valibot

variant

Создает схему варианта.

const Schema = v.variant<TKey, TOptions, TMessage>(key, options, message);

Обобщенные типы

  • TKey extends string
  • TOptions extends VariantOptions<TKey>
  • TMessage extends ErrorMessage<VariantIssue> | undefined

Параметры

  • key TKey
  • options TOptions
  • message TMessage

Пояснение

С помощью variant можно проверить, соответствует ли входное значение одной из заданных объектных options. Схема объекта, используемая для проверки, определяется дискриминатором key. Если входное значение не соответствует схеме и его нельзя однозначно отнести к одному из вариантов, можно использовать message, чтобы настроить сообщение об ошибке.

Допускается указывать один и тот же или похожий дискриминатор несколько раз. Однако в таких случаях variant вернет только результат первого нетипизированного или типизированного варианта. Типизированные результаты имеют приоритет над нетипизированными.

Для глубоко вложенных схем variant с несколькими различными ключами дискриминатора variant при некорректном вводе вернет ошибку для первой наиболее вероятной схемы объекта. Учитываются порядок ключей дискриминатора и наличие дискриминатора во входных данных.

Возвращает

  • Schema VariantSchema<TKey, TOptions, TMessage>

Примеры

В следующих примерах показано, как можно использовать variant.

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

Схема для проверки вариантов адреса электронной почты, URL или даты.

const VariantSchema = v.variant('type', [
  v.object({
    type: v.literal('email'),
    email: v.pipe(v.string(), v.email()),
  }),
  v.object({
    type: v.literal('url'),
    url: v.pipe(v.string(), v.url()),
  }),
  v.object({
    type: v.literal('date'),
    date: v.pipe(v.string(), v.isoDate()),
  }),
]);

Вложенная схема варианта

Также можно вкладывать схемы variant.

const NestedVariantSchema = v.variant('type', [
  VariantSchema,
  v.object({
    type: v.literal('color'),
    date: v.pipe(v.string(), v.hexColor()),
  }),
]);

Сложная схема варианта

Также можно использовать variant для проверки сложных объектов с несколькими различными ключами дискриминатора.

const ComplexVariantSchema = v.variant('kind', [
  v.variant('type', [
    v.object({
      kind: v.literal('fruit'),
      type: v.literal('apple'),
      item: v.object({ … }),
    }),
    v.object({
      kind: v.literal('fruit'),
      type: v.literal('banana'),
      item: v.object({ … }),
    }),
  ]),
  v.variant('type', [
    v.object({
      kind: v.literal('vegetable'),
      type: v.literal('carrot'),
      item: v.object({ … }),
    }),
    v.object({
      kind: v.literal('vegetable'),
      type: v.literal('tomato'),
      item: v.object({ … }),
    }),
  ]),
]);

Связанные API

Следующие API можно использовать вместе с variant.

Схемы

object

Методы

assert, config, fallback, getDefault, getDefaults, getFallback, getFallbacks, is, message, parse, parser, pipe, safeParse, safeParser

Действия

check, brand, description, entries, flavor, guard, maxEntries, metadata, minEntries, notEntries, partialCheck, rawCheck, rawTransform, readonly, title, transform

Утилиты

entriesFromList, isOfKind, isOfType

© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/variant/

Spec-Zone.ru

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