Spec-Zone.ru › Valibot

variantAsync

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

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

Дженерики

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

Параметры

  • key TKey
  • options TOptions
  • message TMessage

Пояснение

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

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

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

Возвращаемое значение

  • Schema VariantSchemaAsync<TKey, TOptions, TMessage>

Примеры

Следующие примеры показывают, как можно использовать variantAsync.

Схема сообщения

Схема для валидации объекта сообщения.

import { isValidGroupReceiver, isValidUserReceiver } from '~/api';

const MessageSchema = v.objectAsync({
  message: v.pipe(v.string(), v.nonEmpty()),
  receiver: v.variantAsync('type', [
    v.objectAsync({
      type: v.literal('group'),
      groupId: v.pipeAsync(
        v.string(),
        v.uuid(),
        v.checkAsync(isValidGroupReceiver, 'The group cannot receive messages.')
      ),
    }),
    v.objectAsync({
      type: v.literal('user'),
      email: v.pipeAsync(
        v.string(),
        v.email(),
        v.checkAsync(isValidUserReceiver, 'The user cannot receive messages.')
      ),
    }),
  ]),
});

Схема пользователя

Схема для валидации уникальных данных пользователя.

import { isRegisteredEmail, isRegisteredUsername, isValidUserId } from '~/api';

const UserSchema = v.variantAsync('type', [
  // Assume this schema is from a different file and reused here.
  v.variantAsync('type', [
    v.objectAsync({
      type: v.literal('email'),
      email: v.pipeAsync(
        v.string(),
        v.email(),
        v.checkAsync(isRegisteredEmail, 'The email is not registered.')
      ),
    }),
    v.objectAsync({
      type: v.literal('username'),
      username: v.pipeAsync(
        v.string(),
        v.nonEmpty(),
        v.checkAsync(isRegisteredUsername, 'The username is not registered.')
      ),
    }),
  ]),
  v.objectAsync({
    type: v.literal('userId'),
    userId: v.pipeAsync(
      v.string(),
      v.uuid(),
      v.checkAsync(isValidUserId, 'The user id is not valid.')
    ),
  }),
]);

Связанное

Следующие API можно комбинировать с variantAsync.

Схемы

looseObject, object, objectWithRest, strictObject

Методы

config, getDefault, getFallback

Действия

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

Утилиты

entriesFromList, isOfKind, isOfType

Асинхронные

checkAsync, fallbackAsync, getDefaultsAsync, getFallbacksAsync, looseObjectAsync, objectAsync, objectWithRestAsync, parseAsync, parserAsync, partialCheckAsync, pipeAsync, rawCheckAsync, rawTransformAsync, safeParseAsync, safeParserAsync, strictObjectAsync, transformAsync

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

Spec-Zone.ru

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