Блок 4 · Урок 4 из 7

TypeScript: зачем типы

Что такое TypeScript, что он ловит до запуска и когда он оправдан, а когда избыточен.

≈ 6 минут 🔷 TypeScript 🎯 цель: понимать «type error», «добавим типы», «перепишем на TypeScript»

Зачем это вам

Агент нередко пишет: «перепишем на TypeScript», «добавим типы», «type error: ждали number, пришла string». Без понимания темы это звучит как лишняя работа или непонятная ошибка. На самом деле типы — это способ ловить целый класс ошибок до того, как приложение запустится у пользователя. Разобравшись один раз, вы сможете осознанно решать: просить агента добавить типы или оставить всё как есть.

Суть

JavaScript + обещания = TypeScript

TypeScript (TS) — это JavaScript плюс типы. Тип (type) — обещание о том, какие данные где: это число, это строка, у пользователя есть поля name и email.

TypeScript проверяет эти обещания до запуска — на этапе написания кода и сборки (build-time, подробнее об этом понятии вы уже встречали в блоке 1). Прямо в редакторе появляется красная подчёркивающая линия, если что-то не так. Чистый JavaScript нашёл бы ту же проблему только в рантайме (runtime) — в момент работы у реального пользователя, и уже в виде поломанной функции или пустого экрана.

Что конкретно TypeScript ловит заранее: опечатку в названии поля, передачу строки туда, где ждут число, обращение к полю объекта, которого не существует. Это не защита от всех ошибок — но это целый класс ошибок, который без типов обнаруживается только в работе.

📌 Простой признак TypeScript в проекте: файлы с расширением .ts или .tsx вместо .js / .jsx, а в корне проекта — файл tsconfig.json.

type User = { name: string; age: number }
// ошибка ещё в редакторе: age должно быть числом
const u: User = { name: "Аня", age: "тридцать" }

TypeScript подчёркивает несоответствие до запуска — строку положили туда, где ждут число.

Когда TypeScript оправдан, а когда нет — это честный вопрос. Серьёзное или растущее приложение, командная работа, важна надёжность → TypeScript почти всегда оправдан. Одноразовый быстрый прототип, крошечный скрипт → можно обойтись JavaScript. Большинство современных проектов (Next.js, Vite с React и другие популярные стартеры) включают TypeScript по умолчанию, поэтому агент выберет его автоматически, если вы не скажете иначе.

Аналогия, которую можно пересказать

Коробки при переезде: с описью или без

Коробка без подписи— JavaScript: грузить быстро, но на месте можно обнаружить, что в коробке «кружки» лежали тарелки — и они разбились
Опись и наклейка— тип: обещание о том, что внутри (число / строка / поля объекта)
Проверка при упаковке— проверка типов на этапе написания и сборки (до запуска)
Разбитые тарелки у клиента— баг в работающем приложении, который TypeScript поймал бы заранее

Типы — это подписи на коробках: ошибку видно при упаковке, а не при распаковке у клиента. Упаковка чуть медленнее (надо подписать), зато грузчики не перевернут хрупкое и сразу видно, если в «кружки» кладут не то.

Запомните одно

TypeScript не усложняет — он сдвигает момент обнаружения ошибки

Ошибка никуда не исчезает. Вопрос только в том, когда вы её увидите: прямо в редакторе — или у пользователя в продакшне (production — боевой режим работы приложения). TypeScript выбирает первое. За счёт этого часы отладки превращаются в секунды исправления.

Что это даёт на практике

Фраза агента → что он имеет в виду

«Добавим типы»
Опишу, какие данные где, чтобы ошибки ловились заранее — в редакторе, а не у пользователя.
«Type error»
Несоответствие типов: что-то передаётся не туда. Это сигнал, а не катастрофа — TypeScript нашёл проблему до запуска.
«Перепишем на TypeScript»
Переведём проект на типизированный JavaScript ради надёжности и удобства — ошибок будет меньше, а редактор станет умнее подсказывать.
«Опишем тип / интерфейс для объекта»
Зафиксируем, какие у объекта поля и какого они вида — чтобы ни агент, ни код случайно не обратились к несуществующему полю.

TypeScript (TS) — надстройка над JavaScript: добавляет типы и проверку до запуска. Браузер не понимает TypeScript напрямую — при сборке он превращается в обычный JS.

Тип (type) — обещание о виде данных: число (number), строка (string), объект с такими-то полями. Нарушение обещания — это и есть ошибка типов.

Проверка типов — отлов несоответствий на этапе написания и сборки (build-time), а не в рантайме (runtime — момент работы у пользователя).

any — специальный тип «отключить проверку для этого значения». Удобен в крайнем случае, но злоупотребление сводит пользу TypeScript на нет.

Проверьте себя

Четыре вопроса с мгновенной проверкой

1. Что такое TypeScript?

2. Что даёт типизация?

3. Когда TypeScript особенно оправдан?

4. Агент пишет: «type error: ждали number, пришла string». Это…

Куда мы идём

Программа курса — 7 блоков