undefinedableAsync
Создает схему, допускающую значение undefined.
const Schema = v.undefinedableAsync<TWrapped, TDefault>(wrapped, default_);
Обобщенные типы
TWrappedextends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>TDefaultextends DefaultAsync<TWrapped, undefined>
Параметры
wrappedTWrappeddefault_TDefault
Пояснение
С помощью undefinedableAsync проверка схемы будет успешно проходить для входных данных undefined, а если указать входное значение default_, схема будет использовать его, если входное значение равно undefined. По этой причине выходной тип может отличаться от входного типа схемы.
undefinedableAsyncво время выполнения работает точно так же, какoptionalAsync. Единственное различие — во входном и выходном типах при использовании в качестве элементов объекта. ЕслиoptionalAsyncдобавляет к ключу вопросительный знак, тоundefinedableAsyncэтого не делает.Обратите внимание, что
undefinedableAsyncне принимаетnullв качестве входного значения. Если нужно принимать входные данныеnull, используйтеnullableAsync, а если нужно принимать входные данныеnullиundefined, используйте вместо этогоnullishAsync. Кроме того, если нужно задать выходное значение по умолчанию для любого недопустимого входного значения, используйте вместо этогоfallbackAsync.
Возвращаемое значение
SchemaUndefinedableSchemaAsync<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/