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