TypeScript: обзор языка и дорожная карта курса
Что это за язык и какую проблему он решает
JavaScript был спроектирован за десять дней в 1995 году как язык для оживления
веб-страниц. Он динамический: тип значения известен только в момент выполнения.
Пока программа умещается в паре сотен строк, это удобно — не надо ничего
объявлять. Но как только код вырастает до сотен тысяч строк и над ним работают
десятки людей, динамическая природа превращается в источник постоянной боли:
опечатка в имени поля, undefined is not a function, тихое приведение типов
("5" + 3 === "53"), рефакторинг вслепую. Ошибки, которые компилятор в других
языках ловит мгновенно, здесь всплывают только в проде — иногда у пользователя.
TypeScript — это надмножество (superset) JavaScript, добавляющее
статическую систему типов. Ключевая идея: любой валидный JavaScript уже
является валидным TypeScript, но TypeScript даёт возможность аннотировать код
типами, а компилятор (tsc) проверяет их согласованность до запуска и затем
стирает типы, выдавая обычный JavaScript. Во время выполнения от TypeScript
не остаётся ничего — типы существуют только на этапе разработки и сборки. Это
называется type erasure (стирание типов), и это фундаментальное свойство:
типы не влияют на поведение программы, они влияют на то, какие программы
компилятор вообще пропустит.
// JavaScript пропустит это и упадёт в рантайме
function greet(user) {
return "Привет, " + user.nmae; // опечатка: nmae вместо name
}
// TypeScript поймает опечатку ещё в редакторе
interface User {
name: string;
}
function greetTyped(user: User): string {
return "Привет, " + user.nmae;
// ~~~~ Property 'nmae' does not exist on type 'User'.
}
Философия TypeScript сформулирована в его design goals: статически выявлять вероятные ошибки, но при этом не мешать. Отсюда несколько принципиальных решений, которые важно понять сразу:
- Постепенная типизация (gradual typing). Можно типизировать проект по
кусочкам, оставляя «дыры» в виде
any. Это позволяет мигрировать огромные JS-кодовые базы инкрементально, но требует дисциплины (см.strict-режим). - Структурная типизация (duck typing). Совместимость типов определяется их формой, а не именем. Если у объекта есть все нужные поля — он подходит, даже если он не «объявлен» как реализация интерфейса. Это отличает TS от номинальных систем вроде Java/C#.
- Компилятор не гарантирует безопасность в рантайме. Из-за
any, приведений (as) и того, что типы описывают ожидания о внешних данных, TypeScript — это unsound система (намеренно). Он ловит подавляющее большинство ошибок, но на границах (сеть, файлы,JSON.parse) типам верить нельзя — нужна рантайм- валидация. Это красная нить всего курса.
Ниши применения
TypeScript стал фактическим стандартом промышленной веб-разработки. По опросам State of JS им пользуется подавляющее большинство профессиональных разработчиков. Основные ниши:
- Фронтенд. React, Vue, Angular, Svelte — все первоклассно поддерживают TS. Типы описывают props компонентов, состояние, ответы API.
- Бэкенд на Node.js. Express, Fastify, NestJS. TypeScript даёт типобезопасные контроллеры, ORM (Prisma, Drizzle), валидацию.
- Полный стек и «shared types». Один монорепозиторий, где типы данных разделяются между сервером и клиентом — исчезает целый класс рассинхронов контракта.
- CLI и инструменты. Большинство современного тулинга (Vite, esbuild-обёртки, Prettier-плагины) пишется на TS.
- Библиотеки. Публикуются с
.d.ts-файлами, чтобы потребители получали автодополнение и проверку типов. - Десктоп (Electron/Tauri) и даже мобильная разработка (React Native).
Там, где нужен предсказуемый низкоуровневый контроль над памятью и максимальная производительность (системное ПО, игровые движки, embedded), выбирают Rust, C++, Go. TypeScript живёт в слое «продуктовой» логики поверх управляемого рантайма (V8), и это его сила, а не ограничение.
Как устроена экосистема
Важно с самого начала разделять две разные роли компилятора:
- Проверка типов (type-checking). Это делает только
tsc. Медленно, но надёжно. Запускается в редакторе (через LSP) и в CI (tsc --noEmit). - Транспиляция (эмит JS). Это может делать
tsc, а может — быстрые инструменты вроде esbuild, swc, Babel. Они не проверяют типы, а просто стирают их и переписывают синтаксис. Отсюда типичная продакшн-схема: сборка быстрым транспилятором, а проверка типов — отдельной командойtsc --noEmit.
Современные рантаймы (Node.js 22+ с --experimental-strip-types, Deno, Bun)
умеют исполнять .ts напрямую, стирая типы на лету. Но и там проверку типов
по-прежнему выполняет отдельный проход tsc.
Дорожная карта курса
Курс построен так, чтобы провести от «понимаю синтаксис» до «умею вести production-сервис на TypeScript». Порядок неслучаен — каждый файл опирается на предыдущий.
- Установка и тулчейн — Node, менеджеры
пакетов,
tsconfig.json, ESLint, Prettier, сборщики, layout проекта. - Фундамент и система типов — структурная
типизация, union/intersection, generics,
unknown/any/never, narrowing. - Продвинутые типы, идиомы и ошибки —
conditional/mapped types,
infer, template literals,satisfies, паттерны и антипаттерны, обработка ошибок. - Конкурентность и асинхронность — event loop, Promise, async/await, AbortController, воркеры, стримы, backpressure.
- Тестирование — Vitest/Jest, моки, property- based, покрытие, тест-пирамида, интеграция в CI.
- Архитектура и продакшн — слоистая/гексагональная архитектура, DI, конфигурация, БД, устойчивость.
- Деплой и наблюдаемость — сборка, Docker, логи (pino), метрики, трейсинг (OpenTelemetry), производительность.
- SDLC и лучшие источники — жизненный цикл, CI/CD, релизы, безопасность зависимостей, кураторский список ресурсов.
Как учиться по этому курсу
- Держите открытым TypeScript Playground. Это REPL с полноценным компилятором прямо в браузере: пишите примеры, наводите курсор на переменные, смотрите выведенные типы. Это главный инструмент обучения.
- Наведение курсора (hover) — ваш дебаггер типов. В любом редакторе с TS наведите курсор на переменную и увидите её выведенный тип. Понимание того, что вывел компилятор, важнее умения писать аннотации.
- Не бойтесь читать сообщения об ошибках целиком. Ошибки TS длинные, но они почти всегда точны. Читайте снизу вверх — самая конкретная причина обычно в конце.
- Основные источники для углубления. Официальный TypeScript Handbook — канонический справочник. Total TypeScript Мэтта Покока — лучший практический материал по системе типов. Книга Effective TypeScript Дэна Вандеркама — 83 конкретных правила «как надо». type-challenges — задачки на типы для прокачки.
Что дальше
Начнём с фундамента, без которого нельзя написать ни строки: настройка тулчейна,
tsconfig.json и структура проекта.