Spec-Zone.ru › Valibot

optionalAsync

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

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

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

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

Параметры

  • wrapped TWrapped
  • default_ TDefault

Пояснение

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

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

Обратите внимание, что optionalAsync не принимает null в качестве входных данных. Если нужно принимать входные данные null, используйте nullableAsync, а если нужно принимать входные данные null и undefined, используйте вместо этого nullishAsync. Кроме того, если нужно задать выходное значение по умолчанию для любых некорректных входных данных, используйте вместо этого fallbackAsync.

Возвращает

  • Schema OptionalSchemaAsync<TWrapped, TDefault>

Примеры

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

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

Схема, принимающая уникальное имя пользователя или undefined.

Если в качестве параметра default_ передать функцию, при каждом равном undefined входном значении схема будет возвращать уникальное имя пользователя, полученное при вызове функции.

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

const OptionalUsernameSchema = v.optionalAsync(
  v.pipeAsync(
    v.string(),
    v.nonEmpty(),
    v.checkAsync(isUsernameUnique, 'The username is not unique.')
  ),
  getUniqueUsername
);

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

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

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.optionalAsync(
    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 | undefined;
    }
*/

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

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

import { isUsernameUnique } from '~/api';

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

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

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

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

const SchemaWithDefault = v.objectAsync({
  isActive: v.pipeAsync(
    v.optionalAsync(v.string(), 'false'), // Default value provided
    v.transformAsync(async (value) => value === 'true') // Runs for missing keys too
  ),
}); // Output type: { isActive: boolean }

Связанные API

Следующие API можно использовать вместе с optionalAsync.

Схемы

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

Асинхронные API

arrayAsync, awaitAsync, checkAsync, customAsync, exactOptionalAsync, fallbackAsync, getDefaultsAsync, getFallbacksAsync, intersectAsync, lazyAsync, looseObjectAsync, looseTupleAsync, mapAsync, nonNullableAsync, nonNullishAsync, nonOptionalAsync, nullableAsync, nullishAsync, objectAsync, objectWithRestAsync, 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/optionalAsync/

Spec-Zone.ru

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