0Pricing
TypeScript Academy · Урок

Схемы zod/valibot и выведение типов

Проверяйте ненадёжные данные с помощью схем, напрямую выводите типы TS из валидаторов, сравнивайте zod и valibot и подключайте их к обработчикам.

«Схемы zod/valibot и выведение типов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 2. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 2 уроков всего.

Введение

Цель: рассматривать внешние данные как неизвестный тип, проверять их по схеме и выводить типы TS из этой схемы. Вы используете zod, познакомитесь с синтаксисом valibot и создадите небольшую вспомогательную функцию для обработчиков.

  • Единый источник истины
  • safeParse и parse
  • Повторное использование выведенных типов

Вывод типов zod

Определите схему один раз. type User = z.infer<typeof userSchema> в точности отражает правила проверки.

import { z } from "zod"

export const userSchema = z.object({
  id: z.string().uuid(),
  name: z.string().min(1),
  age: z.number().int().min(0).optional()
})

export type User = z.infer<typeof userSchema>

// User is kept in sync with runtime rules.

Сравнение safeParse и parse

safeParse возвращает результат с признаком успеха или неудачи, не выбрасывая исключение, поэтому отлично подходит для HTTP-обработчиков; parse выбрасывает исключение при недопустимых входных данных.

import type { Request, Response } from "express"
import { userSchema, type User } from "./schema"

export function createUser(req: Request, res: Response<User | { error: string; issues?: unknown }>) {
  const r = userSchema.safeParse(req.body)
  if (!r.success) {
    return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
  }
  const user = r.data
  return res.status(201).json(user)
}

// parse() throws; safeParse() returns a discriminated union

Вывод типов valibot

valibot предоставляет компактный инструмент проверки с помощью Infer<typeof schema>. Выберите одну библиотеку и используйте ее единообразно во всей команде.

import { object, string, number, optional, minLength, uuid, minValue } from "valibot"
import type { Infer } from "valibot"

export const VUser = object({
  id: string([uuid()]),
  name: string([minLength(1)]),
  age: optional(number([minValue(0)]))
})

export type VUserT = Infer<typeof VUser>

// Similar idea: one schema, inferred type.

Вспомогательная функция проверки

Оберните разбор данных в небольшую вспомогательную функцию, чтобы обработчики получали простую структуру { ok,data } или { ok:false,issues }.

import { ZodTypeAny } from "zod"

export function validate<T extends ZodTypeAny, Out = unknown>(schema: T, value: unknown, onError?: (issues: unknown) => never | void): { ok: true; data: Out } | { ok: false; issues: unknown } {
  const r = schema.safeParse(value)
  if (!r.success) {
    const issues = r.error.format()
    if (onError) onError(issues as unknown as never)
    return { ok: false, issues }
  }
  return { ok: true, data: r.data as unknown as Out }
}

Советы

Советы:

  • Держите схемы рядом с границей системы (HTTP, CLI, операции ввода-вывода с БД).
  • Выводите типы и экспортируйте их — избегайте дублирования вручную написанных типов.
  • Возвращайте ответ 400 с подробностями о проблемах; никогда не доверяйте входным данным клиента.

Проверка пользы вывода типов

Быстрая проверка: зачем выводить типы из схем?

Итоги

Итоги: проверяйте неизвестные входные данные с помощью zod/valibot, используйте safeParse и выводите типы, чтобы согласовать компиляцию и выполнение.

Часто задаваемые вопросы

Урок «Схемы zod/valibot и выведение типов» бесплатный?

Да — полный текст урока «Схемы zod/valibot и выведение типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 2 уроков всего.

Чему я научусь в уроке «Схемы zod/valibot и выведение типов»?

Проверяйте ненадёжные данные с помощью схем, напрямую выводите типы TS из валидаторов, сравнивайте zod и valibot и подключайте их к обработчикам. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 2.

Сколько времени занимает урок «Схемы zod/valibot и выведение типов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Схемы zod/valibot и выведение типов
  2. Защитный разбор и оболочки ошибок
← Назад к TypeScript Academy