exactOptionalAsync
Создаёт схему точной необязательности.
const Schema = v.exactOptionalAsync<TWrapped, TDefault>(wrapped, default_);
Обобщённые типы
TWrappedextends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>TDefaultextends DefaultAsync<TWrapped, never>
Параметры
wrappedTWrappeddefault_TDefault
Пояснение
С помощью exactOptionalAsync проверка схемы будет пропускать отсутствующие записи объекта. Если указать входное значение default_, схема будет использовать его, когда запись объекта отсутствует. Поэтому выходной тип может отличаться от входного типа схемы.
Важно: При использовании в схемах объектов, если ключ отсутствует и значение
default_не задано, конвейер схемы (включая преобразования) не будет выполнен. Чтобы конвейеры выполнялись для отсутствующих ключей, задайте значениеdefault_.От
optionalAsyncэта функция схемы отличается тем, что следует реализации параметра конфигурации TypeScriptexactOptionalPropertyTypesи допускает только отсутствующие, но не неопределённые записи объекта.
Возвращаемое значение
SchemaExactOptionalSchemaAsync<TWrapped, TDefault>
Примеры
В следующих примерах показано, как можно использовать exactOptionalAsync.
Схема нового пользователя
Схема для проверки данных нового пользователя.
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.exactOptionalAsync(
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;
}
*/
Снятие обёртки со схемы точной необязательности
Используйте unwrap, чтобы отменить действие exactOptionalAsync.
import { isUsernameUnique } from '~/api';
const UsernameSchema = v.unwrap(
// Assume this schema is from a different file and is reused here
v.exactOptionalAsync(
v.pipeAsync(
v.string(),
v.nonEmpty(),
v.checkAsync(isUsernameUnique, 'The username is not unique.')
)
)
);
Точная необязательность с асинхронными конвейерами
При использовании exactOptionalAsync в pipeAsync действия конвейера выполняются только в том случае, если задано значение default_ или ключ присутствует. Это относится ко всем действиям конвейера, включая transformAsync, checkAsync и другие.
const SchemaWithoutDefault = v.objectAsync({
isEnabled: v.pipeAsync(
v.exactOptionalAsync(v.string()),
v.transformAsync(async (value) => value === '1') // Does not run for missing keys
),
}); // Output type: { isEnabled?: boolean }
const SchemaWithDefault = v.objectAsync({
isEnabled: v.pipeAsync(
v.exactOptionalAsync(v.string(), '0'), // Default value provided
v.transformAsync(async (value) => value === '1') // Runs for missing keys too
),
}); // Output type: { isEnabled: boolean }
Связанные API
Следующие API можно комбинировать с exactOptionalAsync.
Схемы
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
Асинхронные операции
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, undefinedableAsync, unionAsync, variantAsync
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/exactOptionalAsync/