Spec-Zone.ru › Valibot

rawTransform

Создаёт действие сырого преобразования.

const Action = v.rawTransform<TInput, TOutput>(action);

Обобщения

  • TInput extends any
  • TOutput extends any

Параметры

  • action (context: RawTransformContext<TInput>) => TOutput

Объяснение

С помощью rawTransform вы можете свободно преобразовывать и проверять входные данные с помощью пользовательского action и при необходимости добавлять ошибки.

Возвращаемое значение

  • Action RawTransformAction<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

Методы

forward, pipe

Утилиты

isOfKind, isOfType

© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/rawTransform/

Spec-Zone.ru

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