0Pricing
TypeScript Academy · Урок

Проверка схем с zod и вывод типов в TS

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

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

Введение

Цель: проверять входящие данные с помощью zod и синхронизировать типы TypeScript через z.infer. Вы будете безопасно разбирать данные, отправлять понятные ошибки и подключать проверку к промежуточному ПО.

  • Определять схемы один раз
  • Выводить типы TypeScript
  • safeParse и ошибки 400

Схема и вывод типа

Опишите модель один раз с помощью zod. Производный тип type User = z.infer<typeof userSchema> в точности отражает проверку.

import { z } from "zod"

export const userSchema = z.object({
  id: z.string().regex(/^u_[a-z0-9]+$/),
  name: z.string().min(1),
  age: z.number().int().nonnegative().optional()
})

export type User = z.infer<typeof userSchema>

// Reuse `User` across handlers, services, and tests

safeParse в обработчике

Используйте safeParse, чтобы избежать исключений; возвращайте 400 с отформатированными сведениями об ошибках. Тип ответа отражает как успешную форму, так и форму ошибки.

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

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

Вспомогательное промежуточное ПО

Создайте повторно используемое промежуточное ПО. Оно разбирает тело и либо добавляет типизированные данные, либо возвращает ответ 400 с подробностями.

import { z } from "zod"
import { Request, Response, NextFunction } from "express"

export function validateBody<T extends z.ZodTypeAny>(schema: T) {
  return (req: Request, res: Response, next: NextFunction) => {
    const r = schema.safeParse(req.body)
    if (!r.success) {
      return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
    }
    req.body = r.data
    next()
  }
}

Приведение типов и refine

Используйте z.coerce для принятия чисел в строковом виде, z.enum — для известных значений, а .refine — для правил, зависящих от нескольких полей.

import { z } from "zod"

const signupSchema = z.object({
  email: z.string().email(),
  age: z.coerce.number().int().gte(13),
  role: z.enum(["user", "admin"]).default("user")
}).refine(v => v.role !== "admin" || v.age >= 18, { message: "admin must be adult" })

export type Signup = z.infer<typeof signupSchema>

// Coercion allows numbers in strings; refine adds cross-field rules

Советы по ошибкам

Советы по ошибкам:

  • Всегда используйте safeParse на границе системы.
  • Форматируйте проблемы для клиентов и не раскрывайте трассировки стека.
  • Сужайте unknown до ZodError, если перехватываете ошибки, выброшенные при разборе.

Проверка вывода типов zod

Быстрая проверка: как синхронизировать типы TS со схемами zod?

Повторение

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Обработчики маршрутизатора, типизация Request/Response
  2. Проверка схем с zod и вывод типов в TS
  3. Промежуточное ПО для ошибок и типы результатов
← Назад к TypeScript Academy