Spec-Zone.ru › Valibot

undefinedableAsync

Создает схему, допускающую значение undefined.

const Schema = v.undefinedableAsync<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

Пояснение

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

undefinedableAsync во время выполнения работает точно так же, как optionalAsync. Единственное различие — во входном и выходном типах при использовании в качестве элементов объекта. Если optionalAsync добавляет к ключу вопросительный знак, то undefinedableAsync этого не делает.

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

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

  • Schema UndefinedableSchemaAsync<TWrapped, TDefault>

Примеры

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

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

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

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

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

const UndefinedableUsernameSchema = v.undefinedableAsync(
  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.undefinedableAsync(
    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;
    }
*/

Извлечение исходной схемы из схемы, допускающей undefined

Используйте unwrap, чтобы отменить эффект undefinedableAsync.

import { isUsernameUnique } from '~/api';

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

Связанные API

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

Схемы

any, array, bigint, blob, boolean, custom, date, enum, exactOptional, file, function, instance, intersect, lazy, literal, looseObject, looseTuple, map, nan, never, nonNullable, nonNullish, 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, optionalAsync, parseAsync, parserAsync, partialCheckAsync, pipeAsync, rawCheckAsync, rawTransformAsync, recordAsync, safeParseAsync, safeParserAsync, setAsync, strictObjectAsync, strictTupleAsync, transformAsync, tupleAsync, tupleWithRestAsync, unionAsync, variantAsync

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

Spec-Zone.ru

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