Spec-Zone.ru › Valibot

exactOptionalAsync

Создаёт схему точной необязательности.

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

Обобщённые типы

  • TWrapped extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>
  • TDefault extends DefaultAsync<TWrapped, never>

Параметры

  • wrapped TWrapped
  • default_ TDefault

Пояснение

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

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

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

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

  • Schema ExactOptionalSchemaAsync<TWrapped, TDefault>

Примеры

В следующих примерах показано, как можно использовать exactOptionalAsync.

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

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

import { isEmailUnique, isUsernameUnique } from '~/api';

const NewUserSchema = v.objectAsync({
  email: v.pipeAsync(
    v.string(),
    v.email(),
    v.checkAsync(isEmailUnique, 'The email is not unique.')
  ),
  username: v.exactOptionalAsync(
    v.pipeAsync(
      v.string(),
      v.nonEmpty(),
      v.checkAsync(isUsernameUnique, 'The username is not unique.')
    )
  ),
  password: v.pipe(v.string(), v.minLength(8)),
});

/*
  The input and output types of the schema:
    {
      email: string;
      password: string;
      username?: string;
    }
*/

Снятие обёртки со схемы точной необязательности

Используйте unwrap, чтобы отменить действие exactOptionalAsync.

import { isUsernameUnique } from '~/api';

const UsernameSchema = v.unwrap(
  // Assume this schema is from a different file and is reused here
  v.exactOptionalAsync(
    v.pipeAsync(
      v.string(),
      v.nonEmpty(),
      v.checkAsync(isUsernameUnique, 'The username is not unique.')
    )
  )
);

Точная необязательность с асинхронными конвейерами

При использовании exactOptionalAsync в pipeAsync действия конвейера выполняются только в том случае, если задано значение default_ или ключ присутствует. Это относится ко всем действиям конвейера, включая transformAsync, checkAsync и другие.

const SchemaWithoutDefault = v.objectAsync({
  isEnabled: v.pipeAsync(
    v.exactOptionalAsync(v.string()),
    v.transformAsync(async (value) => value === '1') // Does not run for missing keys
  ),
}); // Output type: { isEnabled?: boolean }

const SchemaWithDefault = v.objectAsync({
  isEnabled: v.pipeAsync(
    v.exactOptionalAsync(v.string(), '0'), // Default value provided
    v.transformAsync(async (value) => value === '1') // Runs for missing keys too
  ),
}); // Output type: { isEnabled: boolean }

Связанные API

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

Схемы

any, array, bigint, blob, boolean, custom, date, enum, exactOptional, 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

Методы

config, getDefault, getFallback, unwrap

Действия

brand, check, description, flavor, guard, metadata, partialCheck, rawCheck, rawTransform, readonly, title, transform

Утилиты

entriesFromList, isOfKind, isOfType

Асинхронные операции

arrayAsync, awaitAsync, checkAsync, customAsync, exactOptionalAsync, fallbackAsync, getDefaultsAsync, getFallbacksAsync, intersectAsync, lazyAsync, looseObjectAsync, looseTupleAsync, mapAsync, nonNullableAsync, nonNullishAsync, nonOptionalAsync, nullableAsync, nullishAsync, objectAsync, objectWithRestAsync, optionalAsync, parseAsync, parserAsync, partialCheckAsync, pipeAsync, rawCheckAsync, rawTransformAsync, recordAsync, safeParseAsync, safeParserAsync, setAsync, strictObjectAsync, strictTupleAsync, transformAsync, tupleAsync, tupleWithRestAsync, undefinedableAsync, unionAsync, variantAsync

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

Spec-Zone.ru

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