TypeScript — это не отдельная программа, которая запускает ваш код. Браузер и сервер выполняют обычный JavaScript, а TypeScript добавляется поверх как слой типов и компилятор. Чтобы начать, нужно собрать небольшой набор инструментов: среду выполнения, менеджер пакетов, компилятор и его настройку. Разберём каждый по очереди.
Node — среда выполнения
Node.js — это среда, в которой JavaScript выполняется вне браузера, на сервере. Когда вы пишете backend на TypeScript, код в итоге исполняет именно Node.
Версии Node нумеруются чётными LTS-релизами (Long Term Support — долгая поддержка): 18, 20, 22. Для нового проекта берите актуальный LTS — на момент написания это Node 20. Чётные версии стабильны и поддерживаются годами, нечётные — экспериментальные, для продакшена их не используют.
Проверить установленную версию:
node --version # v20.x.x
Запустить файл напрямую Node умеет, но только если это уже JavaScript:
node app.js
Файл .ts Node «из коробки» не понимает — его сначала нужно либо скомпилировать, либо запустить через специальный загрузчик (об этом ниже).
Чтобы не привязываться к одной версии Node на машине, удобно ставить менеджер версий — nvm (или fnm). Он позволяет держать несколько версий и переключаться между проектами.
npm и pnpm — менеджеры пакетов
Любой реальный проект зависит от чужих библиотек. npm (Node Package Manager) — встроенный в Node инструмент, который их скачивает и хранит. Список зависимостей и команд проекта описан в файле package.json.
Инициализация нового проекта:
npm init -y # создаёт package.json с настройками по умолчанию
npm install express # ставит библиотеку и записывает её в package.json
Установленные пакеты складываются в папку node_modules/ (её не коммитят в git), а точные версии фиксируются в package-lock.json — чтобы у всех в команде собралось одно и то же.
pnpm — альтернативный менеджер, совместимый с npm по командам, но хранящий пакеты эффективнее: общий кеш на всю машину вместо копии в каждом проекте. На больших проектах он заметно экономит место и время установки.
pnpm install # то же, что npm install, но быстрее и компактнее
pnpm add express
Команды почти одинаковые: install, add, remove. Выбор между ними — вопрос предпочтений команды; начать можно с npm, он уже есть вместе с Node.
Свои скрипты проекта описываются в разделе scripts файла package.json и запускаются через npm run:
{
"scripts": {
"build": "tsc",
"start": "node dist/app.js"
}
}
npm run build # запустит tsc
tsc — компилятор TypeScript
tsc (TypeScript Compiler) — это программа, которая берёт ваши .ts-файлы, проверяет типы и превращает код в обычный JavaScript, понятный Node. Сам TypeScript ставится как зависимость разработки:
npm install --save-dev typescript # -D — то же сокращённо
npx tsc --version # 5.x.x
Флаг --save-dev (-D) означает, что пакет нужен только при разработке, а не во время работы приложения. npx запускает локально установленную версию из node_modules.
Скомпилировать один файл:
npx tsc app.ts # создаст рядом app.js
На практике файлы по одному не компилируют — настройку всего проекта задают в отдельном файле.
tsconfig.json — настройка компилятора
tsconfig.json описывает, как именно компилировать проект: какие файлы брать, в какую версию JavaScript превращать и насколько строго проверять типы. Создать заготовку:
npx tsc --init
Файл получается большим, но на старте важны несколько ключевых опций:
{
"compilerOptions": {
"target": "ES2022", // в какую версию JS компилировать
"module": "NodeNext", // как описывать импорты/экспорты
"strict": true, // включить все строгие проверки типов
"outDir": "dist", // куда складывать результат
"rootDir": "src" // где лежат исходники
}
}
Разберём главные:
- target — версия JavaScript на выходе.
ES2022хорошо подходит для Node 20: современный синтаксис без лишней совместимости со старыми браузерами. - module — как организованы модули (импорты и экспорты). Для backend на Node актуальное значение —
NodeNext. - strict — самая важная опция. Включает сразу набор строгих проверок (запрет неявного
any, контрольnullиundefinedи другие). Короткая формула: всегда начинайте новый проект соstrict: true— иначе теряется половина пользы от TypeScript.
После настройки достаточно одной команды без аргументов — tsc сам найдёт tsconfig.json и соберёт весь проект:
npx tsc
ts-node и tsx — запуск без отдельной сборки
Каждый раз компилировать проект ради проверки одной правки — медленно. Для разработки удобнее запускать .ts напрямую.
ts-node и tsx — инструменты, которые компилируют TypeScript на лету и сразу выполняют его в Node, без ручного вызова tsc. tsx новее и быстрее, его проще настроить:
npm install -D tsx
npx tsx src/app.ts # запустит TypeScript-файл сразу
npx tsx watch src/app.ts # перезапуск при каждом изменении файла
Важно понимать разделение: tsx — для разработки (быстро запустить и проверить), tsc — для сборки релизной версии в папку dist, которую потом исполняет чистый Node. Многие команды tsx используют только локально, а проверку типов в сборке всё равно делают через tsc.
Структура TypeScript-проекта
Типичный минимальный проект выглядит так:
my-app/
├── src/ # исходники .ts
│ └── app.ts
├── dist/ # результат компиляции (в .gitignore)
├── node_modules/ # зависимости (в .gitignore)
├── package.json # зависимости и скрипты
├── package-lock.json
└── tsconfig.json # настройка компилятора
Логика проста: пишете в src/, компилятор кладёт готовый JavaScript в dist/, Node запускает то, что в dist/. Папки dist/ и node_modules/ восстанавливаются командой сборки и установки, поэтому в git их не хранят.
Линтеры и форматтеры
Когда основа собрана, добавляют два инструмента качества кода — это уже не обязательный минимум, но в реальных проектах есть почти всегда.
- ESLint — линтер: ищет подозрительные места и нарушения правил (неиспользуемые переменные, опасные конструкции). Он анализирует код и подсказывает, что переписать.
- Prettier — форматтер: автоматически приводит код к единому виду (отступы, кавычки, переносы). Он не ищет ошибки, а наводит порядок в оформлении.
Роли не пересекаются: ESLint отвечает за «как написано по сути», Prettier — за «как выглядит». Их обычно настраивают вместе и подключают к редактору, чтобы форматирование и проверки срабатывали при сохранении файла.
Коротко
- Node — среда, которая исполняет JavaScript на сервере; берите актуальный LTS (Node 20). Файлы
.tsнапрямую не запускает. - npm (встроен) и pnpm (быстрее, компактнее) ставят зависимости; список и скрипты — в
package.json. - tsc компилирует
.tsв.jsс проверкой типов; настройка — в tsconfig.json. - Ключевые опции tsconfig: target (версия JS), module (
NodeNextдля Node), strict (всегда включать). - tsx запускает TypeScript на лету для разработки; tsc собирает релиз в
dist/. - Структура: исходники в
src/, результат вdist/, зависимости вnode_modules/(последние две — в.gitignore). - ESLint ловит ошибки по сути, Prettier форматирует оформление — разные задачи, работают вместе.
Что почитать дальше
- Модули и npm — как устроены импорты, экспорты и работа с пакетами.
- Основы типов — что именно проверяет компилятор, ради чего нужен
strict. - Что нужно знать про JavaScript — база языка, поверх которого работает TypeScript.