rawTransform
Создаёт действие сырого преобразования.
const Action = v.rawTransform<TInput, TOutput>(action);
Обобщения
TInputextends anyTOutputextends any
Параметры
action(context: RawTransformContext<TInput>) => TOutput
Объяснение
С помощью rawTransform вы можете свободно преобразовывать и проверять входные данные с помощью пользовательского action и при необходимости добавлять ошибки.
Возвращаемое значение
ActionRawTransformAction<TInput, TOutput>
Примеры
В следующих примерах показано, как можно использовать rawTransform.
Вычисление результата игры
Схема, вычисляющая общий счёт игры на основе очков и множителя.
Это действие проверки
rawTransformдобавляет ошибку для очков, превышающих определённый максимум, и передаёт её черезpathсоответствующему вложенному значению очков.
const GameResultSchema = v.pipe(
v.object({
scores: v.array(v.pipe(v.number(), v.integer())),
multiplier: v.number(),
}),
v.rawTransform(({ dataset, addIssue, NEVER }) => {
// Create total variable
let total = 0;
// Iterate over scores and check points
for (let index = 0; index < dataset.value.scores.length; index++) {
// Calculate points by multiplying score with multiplier
const score = dataset.value.scores[index];
const points = score * dataset.value.multiplier;
// Add issue if points exceed maximum of 1,000 points
if (points > 1_000) {
addIssue({
message:
'The score exceeds the maximum allowed value of 1,000 points.',
path: [
{
type: 'object',
origin: 'value',
input: dataset.value,
key: 'scores',
value: dataset.value.scores,
},
{
type: 'array',
origin: 'value',
input: dataset.value.scores,
key: index,
value: score,
},
],
});
// Abort transformation
return NEVER;
}
// Add points to total
total += points;
}
// Add calculated total to dataset
return { ...dataset.value, total };
})
);
Связанные API
Следующие API можно использовать вместе с rawTransform.
Схемы
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
Методы
Утилиты
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/rawTransform/