Учебник TypeScript для начинающих
TypeScript добавляет к привычному JavaScript статическую типизацию — и ловит целый класс ошибок ещё до запуска кода. Этот курс для тех, кто уже знаком с JavaScript и хочет писать надёжный, самодокументируемый и легко рефакторимый код. Вы пройдёте путь от установки компилятора и первого типизированного файла до дженериков, утилитарных типов и сужения типов: разберётесь, как типы устроены, зачем нужен каждый инструмент и где он спасает от реальных багов.
Курс «TypeScript» состоит из 6 разделов и 22 уроков: Введение в TypeScript, Базовые типы, Функции, Объекты, интерфейсы и type-алиасы, Классы и ООП и Продвинутые типы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение в TypeScript
- Зачем нужны типы: проблемы динамического JavaScript
Почему динамическая типизация JavaScript порождает баги и как статические типы TypeScript ловят их ещё до запуска кода.
- Установка TypeScript и компилятор tsc
Как установить TypeScript через npm, скомпилировать первый .ts-файл командой tsc и понять, как TypeScript превращается в обычный JavaScript.
- tsconfig.json: настройка проекта
Что такое tsconfig.json, как создать его через tsc --init и какие опции (target, strict, outDir) важны для каждого TypeScript-проекта.
- Зачем нужны типы: проблемы динамического JavaScript
2 Базовые типы
- Базовые типы: string, number, boolean
Примитивные типы TypeScript — string, number, boolean — и автоматический вывод типов: как аннотировать переменные и почему часто аннотация не нужна.
- Массивы и кортежи (tuple)
Как типизировать массивы в TypeScript двумя способами и зачем нужны кортежи (tuple) — массивы фиксированной длины с типом для каждой позиции.
- any, unknown и never
Три особых типа TypeScript: опасный any, безопасный unknown и недостижимый never — когда каждый из них уместен и почему any стоит избегать.
- Union-типы, литеральные типы и strictNullChecks
Union-типы (string | number), литеральные типы для ограниченного набора значений и защита от null/undefined через strictNullChecks.
- Базовые типы: string, number, boolean
3 Функции
- Типизация параметров и возвращаемого значения
Как аннотировать параметры функции и тип возвращаемого значения в TypeScript, зачем явно указывать возврат и что такое тип void.
- Опциональные параметры, значения по умолчанию и rest
Опциональные параметры через ?, значения по умолчанию и rest-параметры в TypeScript: как делать гибкие функции с правильной типизацией.
- Типы функций и перегрузки
Как описать тип функции (сигнатуру) и использовать его для колбэков, и что такое перегрузки функций в TypeScript для разных наборов аргументов.
- Типизация параметров и возвращаемого значения
4 Объекты, интерфейсы и type-алиасы
- Типизация объектов и интерфейсы
Как описывать форму объекта в TypeScript встроенным типом и через interface — именованный контракт для структуры данных.
- Type-алиасы и их отличие от интерфейсов
Что такое type alias в TypeScript, чем он отличается от interface и когда выбирать каждый из них для описания типов.
- Опциональные и readonly свойства
Как помечать свойства объекта необязательными через ? и защищать их от изменения через readonly в TypeScript.
- Индексные сигнатуры и вложенные структуры
Индексные сигнатуры для объектов-словарей с динамическими ключами и типизация вложенных объектов в TypeScript.
- Типизация объектов и интерфейсы
5 Классы и ООП
- Классы и модификаторы доступа
Классы в TypeScript и модификаторы доступа public, private, protected и readonly: как инкапсулировать данные и защитить поля от внешнего доступа.
- Параметры-свойства в конструкторе
Сокращённый синтаксис TypeScript для объявления и инициализации полей класса прямо в параметрах конструктора (parameter properties).
- Наследование и implements
Наследование классов через extends и реализация интерфейсов через implements в TypeScript: повторное использование кода и контракты для классов.
- Абстрактные классы, геттеры и сеттеры
Абстрактные классы как шаблоны для наследников и геттеры/сеттеры для контролируемого доступа к полям в TypeScript.
- Классы и модификаторы доступа
6 Продвинутые типы
- Дженерики: функции и классы
Дженерики (generics) в TypeScript: как писать функции и классы, работающие с любым типом без потери типобезопасности и без any.
- Перечисления (enum)
Перечисления enum в TypeScript: как задать именованный набор связанных констант, числовые и строковые enum и когда их использовать.
- Утилитарные типы: Partial, Pick, Omit, Record
Встроенные утилитарные типы TypeScript — Partial, Required, Pick, Omit, Record — для создания новых типов на основе существующих без дублирования.
- Сужение типов и type guards
Сужение типов (narrowing) в TypeScript через typeof, in и instanceof, а также пользовательские type guards для безопасной работы с union-типами.
- Дженерики: функции и классы