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