Урок 12

Итоги курса

Курс о типах и интерфейсах в TypeScript.

Что ты узнал

  • Type vs Interface — когда что использовать
  • Опциональные и readonly — свойства и массивы
  • Расширение — extends и пересечение
  • Union — |, сужение, дискриминатор
  • Intersection — &, миксины
  • Discriminated unions — состояния, exhaustive check
  • Type guards — typeof, in, instanceof, пользовательские
  • Generics — параметры типа, ограничения, keyof
  • Utility types — Partial, Pick, Omit, Record и другие
  • API — type guards и Zod

Ключевые паттерны

Discriminated unions — для состояний и вариантов. Невозможные состояния не компилируются.

Type guards — для валидации внешних данных. Функция value is Type.

Generics с keyof — для функций, работающих с любыми объектами безопасно.

Utility types — для преобразования типов без дублирования.

Zod — для сложных схем с валидацией и выводом типа.

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

  • Использовать as вместо type guard
  • Дублировать типы вместо Pick, Omit
  • Забыть exhaustive check в switch
  • Использовать any в API
  • Путать union и intersection
  • Слишком сложные дженерики без нужды

Что дальше

  • Условные типы — T extends U ? X : Y
  • Mapped types — преобразование полей
  • Template literal types — типы из строк
  • TypeScript в React — компоненты, хуки, контекст

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

  • TypeScript Handbook: typescriptlang.org/docs/handbook/2/types-from-types.html
  • Zod: zod.dev
  • Type Challenges: github.com/type-challenges
  • Total TypeScript: totaltypescript.com

Заключение

Типы и интерфейсы — сердце TypeScript. Понимание union, дискриминаторов, guard-ов и дженериков отличает новичка от опытного разработчика. Начинай с простых типов, добавляй сложность по мере необходимости. Хорошие типы описывают предметную область так, что невозможные состояния просто не компилируются.