exactOptional
Создаёт схему exact optional.
const Schema = v.exactOptional<TWrapped, TDefault>(wrapped, default_);
Дженерики
TWrappedextends BaseSchema<unknown, unknown, BaseIssue<unknown>>TDefaultextends Default<TWrapped, never>
Параметры
wrappedTWrappeddefault_TDefault
Объяснение
С помощью exactOptional валидация вашей схемы будет пропускать отсутствующие элементы объекта, и если вы укажете входное значение default_, схема будет использовать его, если элемент объекта отсутствует. По этой причине выходной тип может отличаться от входного типа схемы.
Важно: при использовании в схемах объектов, если ключ отсутствует и значение
default_не указано, конвейер (pipe) схемы (включая преобразования) не будет выполнен. Чтобы гарантировать выполнение конвейеров для отсутствующих ключей, укажите значениеdefault_.Отличие от
optionalзаключается в том, что эта функция схемы следует реализации конфигурацииexactOptionalPropertyTypesв TypeScript и допускает только отсутствующие, но не undefined элементы объекта.
Возвращаемое значение
SchemaExactOptionalSchema<TWrapped, TDefault>
Примеры
Следующие примеры показывают, как можно использовать exactOptional.
Элементы объекта exact optional
Схема объекта с элементами exact optional.
При использовании функции в качестве параметра
default_схема будет возвращать новый экземплярDateкаждый раз, когда входное значение —undefined.
const OptionalEntrySchema = v.object({
key1: v.exactOptional(v.string()),
key2: v.exactOptional(v.string(), "I'm the default!"),
key3: v.exactOptional(v.date(), () => new Date()),
});
Распаковка схемы exact optional
Используйте unwrap, чтобы отменить действие exactOptional.
const OptionalNumberSchema = v.exactOptional(v.number());
const NumberSchema = v.unwrap(OptionalNumberSchema);
Exact optional с конвейерами (pipes)
При использовании exactOptional в pipe действия конвейера выполняются только в том случае, если предоставлено значение default_ или ключ присутствует. Это относится ко всем действиям конвейера, включая transform, check и другие.
const SchemaWithoutDefault = v.object({
isEnabled: v.pipe(
v.exactOptional(v.string()),
v.transform((value) => value === '1') // Does not run for missing keys
),
}); // Output type: { isEnabled?: boolean }
const SchemaWithDefault = v.object({
isEnabled: v.pipe(
v.exactOptional(v.string(), '0'), // Default value provided
v.transform((value) => value === '1') // Runs for missing keys too
),
}); // Output type: { isEnabled: boolean }
Связанные разделы
Следующие API могут быть объединены с exactOptional.
Схемы
any, array, bigint, blob, boolean, custom, date, enum, file, function, instance, intersect, lazy, literal, looseObject, looseTuple, map, nan, never, nonNullable, nonNullish, nonOptional, null, nullable, nullish, number, object, objectWithRest, optional, picklist, promise, record, set, strictObject, strictTuple, string, symbol, tuple, tupleWithRest, undefined, undefinedable, union, unknown, variant, void
Методы
assert, config, fallback, getDefault, getDefaults, getFallback, getFallbacks, is, message, parse, parser, pipe, safeParse, safeParser, unwrap
Действия
check, brand, description, flavor, guard, metadata, partialCheck, rawCheck, rawTransform, readonly, title, transform
Утилиты
entriesFromList, isOfKind, isOfType
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/exactOptional/