Spec-Zone.ru › Valibot

nullishAsync

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

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

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

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

Параметры

  • wrapped TWrapped
  • default_ TDefault

Пояснение

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

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

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

Возвращает

  • Schema NullishSchemaAsync<TWrapped, TDefault>

Примеры

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

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

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

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

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

const NullishUsernameSchema = v.nullishAsync(
  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.nullishAsync(
    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 | null | undefined;
    }
*/

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

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

import { isUsernameUnique } from '~/api';

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

nullishAsync с конвейерами

При использовании nullishAsync в pipeAsync для отсутствующих ключей объекта конвейер выполняется только при наличии значения default_. Если ключ присутствует со значением null или undefined, последующие действия конвейера всё равно выполняются.

const SchemaWithoutDefault = v.objectAsync({
  value: v.pipeAsync(
    v.nullishAsync(v.string()),
    v.transformAsync(async (input) => (input ?? 'hello').toUpperCase()) // Does not run for missing keys
  ),
}); // Output type: { value?: string }

const SchemaWithDefault = v.objectAsync({
  value: v.pipeAsync(
    v.nullishAsync(v.string(), 'hello'), // Default value provided
    v.transformAsync(async (input) => input.toUpperCase()) // Runs for missing keys, null, and undefined too
  ),
}); // Output type: { value: string }

Связанные API

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

Схемы

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, 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/nullishAsync/

Spec-Zone.ru

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