Overview
Лекция посвящена фундаментальным концепциям языка TypeScript: типизации, работе с типами, дженерикам, утилитарным типам, особенностям конфигурации и практическому применению.
Основы TypeScript и типизация
- TypeScript — надмножество JavaScript, добавляющее статическую типизацию.
- JavaScript — язык со слабой динамической типизацией, TypeScript — со статической, структурной.
- Типизацию можно указывать явно или полагаться на вывод типа.
- Типы воспринимаются как множества значений, над которыми можно выполнять объединения (union) и пересечения (intersection).
Системы типов, супертипы и подтипы
- Подтип включает все поля и методы надтипа, может добавлять свои.
- Подтип можно присваивать переменной надтипа; обратное — нет.
- Типы делятся на примитивные, составные, специальные, литералы, union/intersection.
Примитивы и специальные типы
- Примитивы: string, number, boolean, undefined, null, symbol, bigint.
- Специальные типы: any (отключает проверки), unknown (требует проверки), never (пустое множество), void (функция не возвращает значения).
Составные типы: объекты, интерфейсы, type
- Описание типов объектов возможно через interface и type.
- Вложенные объекты задают через поля с типами.
- Массивы типизируются добавлением [] к типу.
Литералы и сужение типов
- Литералы — конкретные строковые, числовые, boolean значения, используемые для ограничения допустимых значений.
- Сужение типов (type narrowing) — проверка типа значения для последующей работы с ним.
Дженерики и условные типы
- Дженерики (обобщения) позволяют создавать универсальные типы и функции.
- Условные типы (conditional types) реализуются через extends; inf — извлекает тип из структуры.
Утилитарные и мап-типы
- Утилитарные типы: Partial (необязательные поля), Required, Readonly, Pick, Omit, Exclude, Extract, ReturnType, Parameters, Record.
- Maped Types позволяют создавать новые типы на основе существующих, преобразовывая поля.
Перечисления (enum) и объекты-константы
- Enum — перечисление фиксированных значений; есть особенности компиляции.
- Рекомендуется использовать константные объекты с типами, извлечёнными через typeof и утилиты.
Type Guards, assertion и asserts
- Type Guard — пользовательская функция для уточне ния типа.
- Type Assertion (as) — явное преобразование типа (использовать осторожно).
- Asserts в функции дополнительно выбрасывает ошибку при несоответствии.
Преобразование типов
- Неявное (автоматическое) и явное (assertion или as/unknown/as).
- Использование satisfies для проверки соответствия типа, не меняя его форму.
Работа с конфигурацией и проектами
- Основные настройки TypeScript: target, module, strict mode.
- Проект начинается с инициализации npm и установки typescript.
- Используйте отдельные файлы конфигураций (tsconfig.json).
Практические советы и рекомендации
- Не использовать any, ts-ignore, type assertion и non-null assertion в продакшн-коде.
- Начинать с малого, много практиковаться на петпроектах.
- Решать реальные задачи, а не только абстрактные тренажёры для лучшего усвоения.
Key Terms & Definitions
- Структурная типизация — совместимость по структуре, а не по имени типа.
- Union (объединение) — тип, принимающий значения любого из объединённых типов.
- Intersection (пересечение) — тип, включающий только общие свойства пересекаемых типов.
- Generic (дженерик) — обобщённый параметр типа, задаётся через <T>.
- Mapped Types (мап-тип) — типы, модифицирующие свойства других типов.
- Type Guard — функция, сужающая тип переменной по условию.
- Type Assertion — явное указание типа через as.
- Utility Types — стандартные утилиты TypeScript для работы с типами.
Action Items / Next Steps
- Повторить ключевые темы: типы, дженерики, утилиты.
- Настроить свой первый проект TypeScript и поэкспериментировать с описанными инструментами.
- Ознакомиться с официальной документацией по утилитарным типам TypeScript.
- Выполнить домашние задания/примеры, предложенные по ходу курса.