Spec-Zone.ru › Valibot

Разбор данных

Теперь, когда вы знаете, как создавать схему, давайте посмотрим, как использовать её для проверки неизвестных данных и обеспечения их типобезопасности. Есть три способа это сделать.

У каждой схемы есть метод ~run. Однако это внутренний API, и его следует использовать только в том случае, если вы понимаете, что делаете.

Разбор с выбросом ошибки

Метод parse выбросит ошибку ValiError, если входные данные не соответствуют схеме. Поэтому для перехвата ошибок следует использовать блок try/catch. Если входные данные соответствуют схеме, они считаются корректными, и результат схемы будет возвращён с правильным типом TypeScript.

import * as v from 'valibot';

try {
  const EmailSchema = v.pipe(v.string(), v.email());
  const email = v.parse(EmailSchema, 'jane@example.com');

  // Handle errors if one occurs
} catch (error) {
  console.log(error);
}

Разбор с возвратом результата

Если вы хотите получать сведения об ошибках, а не выбрасывать их, можно использовать safeParse. Возвращаемое значение содержит свойство .success, которое равно true, если входные данные корректны, и false в противном случае.

Если входные данные корректны, результат проверки схемы можно получить с помощью .output. Если же входные данные некорректны, найденные ошибки можно получить через .issues.

import * as v from 'valibot';

const EmailSchema = v.pipe(v.string(), v.email());
const result = v.safeParse(EmailSchema, 'jane@example.com');

if (result.success) {
  const email = result.output;
} else {
  console.log(result.issues);
}

Защитные проверки типов

Ещё один способ проверки данных, который может быть полезен в отдельных случаях, — использовать защитную проверку типа. Можно использовать предикат типа с методом is или функцию утверждения с методом assert.

При использовании защитной проверки типа ошибки проверки получить нельзя. Кроме того, преобразования не выполняются, а неизвестные ключи объекта не удаляются. Поэтому этот подход не так безопасен и эффективен, как два предыдущих. Также из-за ограничения TypeScript в настоящее время его можно использовать только с синхронными схемами.

import * as v from 'valibot';

const EmailSchema = v.pipe(v.string(), v.email());
const data: unknown = 'jane@example.com';

if (v.is(EmailSchema, data)) {
  const email = data; // string
}

Конфигурация

По умолчанию Valibot собирает все ошибки, возникающие при проверке, чтобы подробно объяснить, почему входные данные не соответствуют схеме. Если в вашем случае это не требуется, можно управлять этим поведением с помощью abortEarly и abortPipeEarly, чтобы повысить производительность проверки.

Прерывание проверки

Если установить abortEarly в значение true, проверка данных немедленно прервётся при обнаружении первой ошибки. Если вам нужно лишь узнать, соответствуют ли данные схеме, а подробности не важны, это может повысить производительность.

import * as v from 'valibot';

try {
  const ProfileSchema = v.object({
    name: v.string(),
    bio: v.string(),
  });
  const profile = v.parse(
    ProfileSchema,
    { name: 'Jane', bio: '' },
    { abortEarly: true }
  );

  // Handle errors if one occurs
} catch (error) {
  console.log(error);
}

Прерывание конвейера

Если установить только abortPipeEarly в значение true, проверка в конвейере будет прервана только после обнаружения первой ошибки. Например, если при проверке формы нужно показать лишь первую ошибку поля, этот параметр поможет повысить производительность.

import * as v from 'valibot';

try {
  const EmailSchema = v.pipe(v.string(), v.email(), v.endsWith('@example.com'));
  const email = v.parse(EmailSchema, 'jane@example.com', {
    abortPipeEarly: true,
  });

  // Handle errors if one occurs
} catch (error) {
  console.log(error);
}

© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/guides/parse-data/

Spec-Zone.ru

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