Spec-Zone.ru › Valibot

Быстрый старт

Схему Valibot можно сравнить с определением типа в TypeScript. Главное отличие в том, что типы TypeScript «не выполняются» и в большей или меньшей степени являются функцией для удобства разработки. Схема же, помимо выводимого определения типа, может выполняться во время работы программы, чтобы действительно гарантировать безопасность типов неизвестных данных.

Основная концепция

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

import * as v from 'valibot';

// TypeScript
type LoginData = {
  email: string;
  password: string;
};

// Valibot
const LoginSchema = v.object({
  email: v.string(),
  password: v.string(),
});

Конвейеры

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

import * as v from 'valibot';

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

Конвейер всегда должен начинаться со схемы, за которой может следовать до 19 действий проверки или преобразования. Они выполняются последовательно, а результат предыдущего действия передаётся следующему. Подробнее о конвейерах читайте в этом руководстве.

Сообщения об ошибках

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

import * as v from 'valibot';

const LoginSchema = v.object({
  email: v.pipe(
    v.string('Your email must be a string.'),
    v.nonEmpty('Please enter your email.'),
    v.email('The email address is badly formatted.')
  ),
  password: v.pipe(
    v.string('Your password must be a string.'),
    v.nonEmpty('Please enter your password.'),
    v.minLength(8, 'Your password must have 8 characters or more.')
  ),
});

Пользовательские сообщения об ошибках позволяют повысить удобство использования программного обеспечения: они содержат конкретные сведения об устранении неполадок и могут выводиться не на английском языке. Подробнее см. в руководстве по интернационализации.

Использование

Наконец, с помощью схемы можно вывести типы входных и выходных данных, а также анализировать неизвестные данные. Таким образом, схема становится единственным источником истины. Эта концепция упрощает процесс разработки и в долгосрочной перспективе делает код надёжнее.

import * as v from 'valibot';

const LoginSchema = v.object({…});

type LoginData = v.InferOutput<typeof LoginSchema>;

function getLoginData(data: unknown): LoginData {
  return v.parse(LoginSchema, data);
}

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

Spec-Zone.ru

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