Вывод типов из схем
Выводите статические типы непосредственно из схем Zod
«Вывод типов из схем» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Schema содержит информацию о типе
Schema Zod знает тип TypeScript, который она проверяет. z.infer извлекает этот тип, поэтому структуру нужно описать один раз.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User is { name: string; age: number }Средство z.infer
z.infer<typeof schema> создаёт статический тип, который проверяет schema. Обратите внимание на typeof: передаётся значение schema.
import { z } from "zod";
const tagSchema = z.array(z.string());
type Tags = z.infer<typeof tagSchema>; // string[]Единый источник истины
Без вывода типов Вам пришлось бы отдельно поддерживать тип и schema, и со временем они могли бы разойтись. z.infer сохраняет их полную синхронность.
import { z } from "zod";
const schema = z.object({ id: z.number(), email: z.string() });
type Account = z.infer<typeof schema>;
// Change the schema, the type updates automatically.Вывод вложенных типов
Вывод типов обрабатывает вложенные объекты и массивы, создавая полный вложенный тип TypeScript из одной schema.
import { z } from "zod";
const postSchema = z.object({
title: z.string(),
author: z.object({ name: z.string() }),
tags: z.array(z.string())
});
type Post = z.infer<typeof postSchema>;
// Post.author.name is stringИспользование выведенного типа
Используйте выведенный тип везде, где применили бы написанный вручную тип: в параметрах функций, переменных и возвращаемых типах.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
function greet(u: User): string {
return "Hi " + u.name;
}parse возвращает выведенный тип
schema.parse возвращает значение, уже типизированное как выведенный тип, поэтому последующий код полностью типизирован.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
const raw: unknown = { name: "Ada", age: 36 };
const user: User = userSchema.parse(raw); // typed and validatedНеобязательные и допускающие null поля в типе
Модификаторы schema передаются в выведенный тип. Поле с модификатором .optional() становится необязательным в TypeScript.
import { z } from "zod";
const schema = z.object({
name: z.string(),
nickname: z.string().optional()
});
type P = z.infer<typeof schema>;
// P is { name: string; nickname?: string }Вывод типов из массивов объектов
Объедините z.array и z.object, и выведенный тип будет массивом объектов соответствующего типа.
import { z } from "zod";
const usersSchema = z.array(z.object({ id: z.number() }));
type Users = z.infer<typeof usersSchema>;
// Users is { id: number }[]Зачем нужен typeof
Schema является значением, поэтому перед передачей в z.infer нужно обратиться к её типу с помощью typeof schema.
import { z } from "zod";
const s = z.string();
type S = z.infer<typeof s>; // string
// z.infer<s> would be wrong: s is a value, not a type.Вывод типов на границах модулей
Экспортируйте и schema, и её выведенный тип, чтобы другие модули могли единообразно проверять данные и использовать ту же структуру.
import { z } from "zod";
export const userSchema = z.object({ name: z.string() });
export type User = z.infer<typeof userSchema>;
// Consumers import both the runtime schema and the type.Одно определение, два мира
Schema отвечает за проверку во время выполнения, а z.infer — за типизацию во время компиляции. Одно объявление обеспечивает и то и другое, устраняя дублирование.
import { z } from "zod";
const configSchema = z.object({ port: z.number(), host: z.string() });
type Config = z.infer<typeof configSchema>;
// Validate at runtime, type at compile time, no drift.Быстрая проверка: вывод типов
Проверьте, насколько хорошо Вы понимаете вывод типов из schema.
Повторение: вывод типов из schema
Вы узнали, что z.infer<typeof schema> выводит тип TypeScript из schema Zod, создавая единый источник истины для проверки и типов, включая вложенные, необязательные структуры и массивы.
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User stays in sync with the schema automatically.Изучай TypeScript с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 101
- Уроки
- 352
Часто задаваемые вопросы
Урок «Вывод типов из схем» бесплатный?
Да — полный текст урока «Вывод типов из схем» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Вывод типов из схем»?
Выводите статические типы непосредственно из схем Zod Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Вывод типов из схем»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы схем Zod
- Вывод типов из схем
- parse и safeParse
- Составление и уточнение схем