0Pricing
TypeScript Academy · Урок

Повторно используемые шаблоны для моделей данных

Применяйте обобщённые шаблоны к реальным моделям: 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 — локальная установка не требуется.

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

  1. Обобщённые интерфейсы и псевдонимы типов
  2. Условные типы (введение) и распределение по объединениям
  3. Повторно используемые шаблоны для моделей данных
← Назад к TypeScript Academy