variantAsync
Создаёт схему варианта.
const Schema = v.variantAsync<TKey, TOptions, TMessage>(key, options, message);
Дженерики
TKeyextends stringTOptionsextends VariantOptionsAsync<TKey>TMessageextends ErrorMessage<VariantIssue> | undefined
Параметры
keyTKeyoptionsTOptionsmessageTMessage
Пояснение
С помощью variantAsync вы можете проверить, соответствует ли входное значение одному из указанных вариантов объекта options. Схема объекта, используемая для валидации, определяется ключом-дискриминатором key. Если входные данные не соответствуют схеме и не могут быть однозначно сопоставлены с одним из вариантов, вы можете использовать message для настройки сообщения об ошибке.
Разрешается указывать точно такой же или похожий дискриминатор несколько раз. Однако в таких случаях
variantAsyncвернет результат только первого нетипизированного или типизированного варианта. Типизированные результаты имеют приоритет над нетипизированными.Для глубоко вложенных схем
variantс несколькими различными ключами дискриминатораvariantвернет ошибку для первых наиболее вероятных схем объектов при недопустимых входных данных. При этом учитываются порядок ключей дискриминатора и наличие дискриминатора во входных данных.
Возвращаемое значение
SchemaVariantSchemaAsync<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/