TypeScript Academy · Урок

Составление и уточнение схем

Создавайте сложные схемы с помощью refine, transform и объединений

Урок 4 из 413 шагов

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

Schema можно составлять

Schema Zod — это составные строительные блоки. Их можно уточнять, преобразовывать, расширять и объединять, чтобы описывать сложные правила проверки.

import { z } from "zod";
const base = z.object({ name: z.string() });
// We will add rules and combine schemas from here.

Пользовательские правила с refine

.refine добавляет пользовательский предикат проверки с сообщением об ошибке для правил, которых нет среди встроенных возможностей Zod.

import { z } from "zod";
const password = z.string().refine(
  (s) => s.length >= 8,
  { message: "Must be at least 8 characters" }
);
// password.parse("short") throws with that message.

Уточнение по нескольким полям

Применяйте .refine к объекту, чтобы проверять связи между полями, например совпадение подтверждения password.

import { z } from "zod";
const form = z.object({
  password: z.string(),
  confirm: z.string()
}).refine((d) => d.password === d.confirm, {
  message: "Passwords must match"
});
// Validates both fields together.

Преобразование значений

.transform преобразует проверенное значение в другую структуру после успешного завершения проверки.

import { z } from "zod";
const trimmed = z.string().transform((s) => s.trim());
const result = trimmed.parse("  hi  "); // "hi"

Необязательные поля

.optional() разрешает отсутствие поля, что отражается и в проверке, и в выведенном типе.

import { z } from "zod";
const schema = z.object({
  name: z.string(),
  bio: z.string().optional()
});
// bio may be omitted.

Значения по умолчанию

.default подставляет значение, если входные данные не содержат поле, поэтому в результате parse это поле всегда заполнено.

import { z } from "zod";
const schema = z.object({
  retries: z.number().default(3)
});
const r = schema.parse({}); // { retries: 3 }

Объединяющие schema

z.union принимает значение, соответствующее любой одной из нескольких schema; это аналог объединения типов TypeScript в Zod.

import { z } from "zod";
const id = z.union([z.string(), z.number()]);
// id.parse("abc") and id.parse(123) both succeed.

Дискриминируемые объединения в Zod

z.discriminatedUnion эффективно проверяет объединения с тегами, переключаясь по полю-дискриминатору.

import { z } from "zod";
const shape = z.discriminatedUnion("kind", [
  z.object({ kind: z.literal("circle"), radius: z.number() }),
  z.object({ kind: z.literal("square"), side: z.number() })
]);
// Picks the right member by kind.

Расширение с помощью extend

.extend добавляет поля в существующую объектную schema, позволяя создавать большие schema из небольших.

import { z } from "zod";
const base = z.object({ id: z.number() });
const user = base.extend({ name: z.string() });
// user validates { id: number; name: string }

Объединение объектных schema

Также можно объединить две объектные schema с помощью .merge, собрав все их поля в одну schema.

import { z } from "zod";
const a = z.object({ x: z.number() });
const b = z.object({ y: z.string() });
const combined = a.merge(b);
// combined validates { x: number; y: string }

Объединение всех возможностей в цепочку

Уточнения, преобразования, значения по умолчанию и расширения можно свободно объединять в цепочку, чтобы выразить сложную проверку в одной понятной schema.

import { z } from "zod";
const signup = z.object({
  email: z.string().refine(s => s.includes("@"), { message: "Invalid email" }),
  age: z.number().default(18)
}).extend({
  newsletter: z.boolean().optional()
});
// One schema, many rules.

Быстрая проверка: составление schema

Проверьте, насколько хорошо Вы понимаете составление и уточнение schema.

Повторение: составление и уточнение schema

Вы научились добавлять пользовательские правила с помощью .refine, изменять структуру значений с помощью .transform, обрабатывать отсутствующие данные с помощью .optional и .default, объединять варианты с помощью z.union и расширять schema с помощью .extend и .merge.

import { z } from "zod";
const schema = z.object({ name: z.string() })
  .extend({ age: z.number().default(0) })
  .refine(d => d.name.length > 0, { message: "Name required" });
// Composed validation in one place.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

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

Курсы
101
Уроки
352

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

Урок «Составление и уточнение схем» бесплатный?

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

Чему я научусь в уроке «Составление и уточнение схем»?

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

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

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

Сколько времени занимает урок «Составление и уточнение схем»?

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

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

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

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

  1. Основы схем Zod
  2. Вывод типов из схем
  3. parse и safeParse
  4. Составление и уточнение схем
← Назад к TypeScript Academy