Урок 12

Итоги курса

Курс о дженериках в TypeScript.

Что ты узнал

  • Что такое дженерики — параметры типа, <T>
  • Дженерик-функции — вывод, несколько параметров
  • Ограничения — extends, keyof
  • keyof и typeof — ключи и типы значений
  • Дженерик-типы — type, interface, дефолты
  • Дженерик-классы — коллекции, репозитории
  • Условные типы — T extends U ? X : Y
  • Mapped types — [K in keyof T]
  • infer — извлечение типа
  • Продвинутые утилиты — DeepPartial, RequiresAtLeastOne, Brand
  • Практика — pick, omit, groupBy

Ключевые идеи

Параметр типа — placeholder для типа. Работает с чем угодно.

Ограничение extends — сужает возможные типы, даёт безопасность.

keyof + T[K] — доступ к значениям по ключу с проверкой.

Условные типы + infer — разбор типов на части.

Mapped types — преобразование всех ключей по шаблону.

Глубокие утилиты — рекурсивные дженерики для вложенных структур.

Частые ошибки

  • Использовать any вместо дженерика
  • Слишком сложные типы без нужды
  • Забыть ограничение extends, когда нужно
  • Не понимать распространение на union
  • Путать infer и extends
  • Строить типы, которые невозможно реализовать в рантайме

Когда использовать

Дженерик — когда одна реализация для разных типов с сохранением типа.

extends — когда нужен доступ к полям параметра.

keyof — когда работаешь с ключами объекта.

Условный тип — когда результат зависит от входного типа.

Mapped type — когда преобразуешь все ключи.

infer — когда извлекаешь часть типа.

Что дальше

  • Template literal types — типы из строк
  • Variadic tuples — операции над кортежами
  • TypeScript в библиотеках — декларации .d.ts
  • Написание своих утилит

Полезные ссылки

  • TypeScript Handbook: typescriptlang.org/docs/handbook/2/generics.html
  • Type Challenges: github.com/type-challenges
  • Type-Level TypeScript: type-level-typescript.com
  • Total TypeScript: totaltypescript.com

Заключение

Дженерики — продвинутая тема. Их не нужно использовать везде: часто хватает конкретных типов и union. Но когда нужна переиспользуемая безопасность — дженерики незаменимы. Начинай с простых случаев: first<T>, Box<T>. Усложняй только когда видишь повторяющийся паттерн. Хороший дженерик описывает намерение, а не показывает мастерство.