📝

Обзор TypeScript

Jun 16, 2025

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.
  • Выполнить домашние задания/примеры, предложенные по ходу курса.