Повторно используемые шаблоны для моделей данных
Применяйте обобщённые шаблоны к реальным моделям: Paginated , Result , DTO с Pick/Omit/Partial и отображениям с ключами-идентификаторами.
«Повторно используемые шаблоны для моделей данных» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: упаковывать распространённые формы данных в обобщённые типы, чтобы повторно использовать структуру без потери типобезопасности.
- Paginated<T>
- Result<T,E>
- DTO с Pick/Omit/Partial
- Отображения с ключами id
Paginated<T>
Paginated<T> централизует метаданные и сохраняет точный тип T элементов списков.
type Paginated<T> = {
items: T[];
total: number;
page: number;
pageSize: number;
};
type User = { id: number; name: string };
const page1: Paginated<User> = {
items: [{ id: 1, name: "Ada" }],
total: 10,
page: 1,
pageSize: 5,
};
console.log(page1.items[0].name);Result<T,E>
Result<T,E> явно описывает успешное выполнение и сбой с помощью дискриминатора (ok) для безопасного выбора ветви.
type Ok<T> = { ok: true; data: T };
type Err<E = string> = { ok: false; error: E };
type Result<T, E = string> = Ok<T> | Err<E>;
function readUser(id: number): Result<{ id: number; name: string }> {
return id > 0 ? { ok: true, data: { id, name: "Ada" } } : { ok: false, error: "not found" };
}
const r = readUser(1);
if (r.ok) {
console.log(r.data.name);
} else {
console.error(r.error);
}Шаблоны DTO
С помощью Pick/Omit/Partial можно получать компактные типы DTO из основной модели без дублирования.
type User = { id: number; name: string; email?: string; role: "user" | "admin" };
type UserCreateDto = Pick<User, "name" | "email">; // fields required to create
// Update = partial editable fields
type UserUpdateDto = Partial<Pick<User, "name" | "email">>;
const createBody: UserCreateDto = { name: "Ada", email: "a@x.io" };
const updateBody: UserUpdateDto = { name: "Ada L." };MapById<T>
MapById<T> индексирует сущности по id для быстрого поиска. Ограничьте T, чтобы гарантировать наличие id.
type Key = string | number;
type MapById<T extends { id: Key }> = Record<Key, T>;
const byId: MapById<{ id: number; name: string }> = {
1: { id: 1, name: "Ada" },
2: { id: 2, name: "Lin" },
};
console.log(byId[1].name);Советы
Советы:
- Делайте шаблоны небольшими и пригодными для композиции.
- Для конечных автоматов предпочитайте дискриминированные объединения.
- Получайте DTO из моделей — избегайте ручного копирования.
Проверка Paginated<T>
Быстрая проверка: Зачем определять обобщённый тип Paginated<T>?
Итоги
Итоги: Обобщайте повторяющиеся формы: Paginated<T>, Result<T,E>, DTO с Pick/Omit/Partial и отображения с индексами id. Небольшие вспомогательные типы масштабируются на разные возможности.
Часто задаваемые вопросы
Урок «Повторно используемые шаблоны для моделей данных» бесплатный?
Да — полный текст урока «Повторно используемые шаблоны для моделей данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Повторно используемые шаблоны для моделей данных»?
Применяйте обобщённые шаблоны к реальным моделям: Paginated , Result , DTO с Pick/Omit/Partial и отображениям с ключами-идентификаторами. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Повторно используемые шаблоны для моделей данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обобщённые интерфейсы и псевдонимы типов
- Условные типы (введение) и распределение по объединениям
- Повторно используемые шаблоны для моделей данных