Составление и уточнение схем
Создавайте сложные схемы с помощью refine, transform и объединений
«Составление и уточнение схем» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Основы схем Zod
- Вывод типов из схем
- parse и safeParse
- Составление и уточнение схем