Spec-Zone.ru › Valibot

exactOptional

Создаёт схему exact optional.

const Schema = v.exactOptional<TWrapped, TDefault>(wrapped, default_);

Дженерики

  • TWrapped extends BaseSchema<unknown, unknown, BaseIssue<unknown>>
  • TDefault extends Default<TWrapped, never>

Параметры

  • wrapped TWrapped
  • default_ TDefault

Объяснение

С помощью exactOptional валидация вашей схемы будет пропускать отсутствующие элементы объекта, и если вы укажете входное значение default_, схема будет использовать его, если элемент объекта отсутствует. По этой причине выходной тип может отличаться от входного типа схемы.

Важно: при использовании в схемах объектов, если ключ отсутствует и значение default_ не указано, конвейер (pipe) схемы (включая преобразования) не будет выполнен. Чтобы гарантировать выполнение конвейеров для отсутствующих ключей, укажите значение default_.

Отличие от optional заключается в том, что эта функция схемы следует реализации конфигурации exactOptionalPropertyTypes в TypeScript и допускает только отсутствующие, но не undefined элементы объекта.

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

  • Schema ExactOptionalSchema<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/

Spec-Zone.ru

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