Введение в TypeScript
Введение в TypeScript
Технический фундамент TypeScript как системы типов
Важно понимать, как TypeScript устроен технически:
- типы проверяются только на этапе разработки и компиляции;
- после компиляции в рантайме остается обычный JavaScript;
- TypeScript использует в основном структурную типизацию (совместимость по форме, а не по имени типа);
- уровень строгости зависит от настроек
tsconfig(strict,noImplicitAny,strictNullChecksи др.).
Это объясняет, почему один и тот же код может быть "валидным в TS" при мягких настройках и невалидным при строгих.
Мини-пример структурной типизации (важно понять именно идею "по форме"):
type User = { id: number; name: string };
type Person = { id: number; name: string };
const user: User = { id: 1, name: 'Anna' };
const person: Person = user; // OK: типы разные по имени, но совместимы по структуре
Смотри, что важно: если в Person добавить обязательное поле (например, age: number), присваивание станет ошибкой, потому что структура перестанет совпадать.
Зачем JavaScript-разработчику TypeScript
JavaScript гибкий и быстрый для старта, но на больших проектах гибкость превращается в риск: случайные undefined, ошибки типов в рантайме, сложные рефакторинги. TypeScript добавляет статическую типизацию поверх JavaScript и помогает ловить проблемы до запуска кода.
Ключевой момент: TypeScript не заменяет JavaScript, а расширяет его и проверяет твой код на этапе разработки.
Проверь себя: почему ошибка, найденная в редакторе до запуска, почти всегда дешевле ошибки в продакшене?
Что такое TypeScript простыми словами
TypeScript это надмножество JavaScript:
- любой валидный JS-код - валидный TS-код;
- в TS ты можешь добавлять типы (
string,number, интерфейсы и т.д.); - затем TypeScript компилирует код в обычный JavaScript.
let userName = 'Anna';
userName = 42; // JS пропустит, но это логически опасно
let userName: string = 'Anna';
userName = 42; // Ошибка TypeScript: number не подходит к string
Смотри, что важно: TypeScript проверяет типы до выполнения, но в браузере/Node в итоге все равно исполняется JavaScript.
Как устроен процесс разработки
Обычно рабочий цикл такой:
- Пишешь
.ts/.tsx. - TypeScript проверяет типы.
- Компилятор (
tsc) генерирует.js. - Запускается уже JS.
Это значит, что TypeScript помогает в этапе "написал и проверил", а не меняет поведение движка JavaScript напрямую.
Проверь себя: почему типы из TS не могут "поймать" все логические ошибки в рантайме?
Что TypeScript дает команде
- Явные контракты функций и данных.
Сигнатура функции сразу показывает, что она принимает и что возвращает.
- Безопасный рефакторинг.
Переименовал поле или поменял тип - компилятор покажет все места, где нужно исправить.
- Лучшая автодополняемость и навигация в IDE.
Подсказки становятся точнее, меньше "угадывания" API.
- Снижение количества багов типа "не тот формат данных".
Особенно это заметно при работе с API и большими объектами.
Мини-сценарии из продукта
- Ответ API профиля.
Без типизации поле age может прийти строкой, и баг всплывет только в рантайме. С TypeScript ты описываешь ожидаемую структуру и видишь проблему сразу.
- Форма регистрации.
Типы помогают не перепутать boolean-флаг и строковое поле email при передаче в сервис.
- Командная разработка.
Новый разработчик быстрее понимает модель данных, потому что контракт описан типами, а не только комментариями.
Частые ошибки новичков
- Считать, что TypeScript "лечит" любую архитектурную проблему.
- Добавлять
anyвезде и терять смысл типизации. - Пытаться типизировать всё сразу в legacy-коде без постепенного подхода.
- Игнорировать сообщения компилятора вместо исправления причин.
Анти-провал: используй any как временный мост, а не как постоянное решение.
Что будет, если изменить входные данные
Если функция ожидает number, а ты передашь string, TypeScript выдаст ошибку до запуска. В чистом JS это часто проявится позже как NaN или неожиданный результат. Именно поэтому TS особенно полезен на границе модулей и при работе с внешними данными.
Проверь себя: где типизация дает наибольшую пользу - в коротком скрипте на 20 строк или в проекте с десятками модулей?
Краткий итог
- TypeScript это надстройка над JavaScript со статической типизацией.
- Он помогает ловить ошибки типов до выполнения кода.
- Компиляция TS -> JS сохраняет совместимость с текущей экосистемой.
- Главная ценность TS в крупных проектах: контракты, рефакторинг, понятность кода.
- TypeScript усиливает качество разработки, но не заменяет здравую архитектуру и тесты.