TypeScript: компиляция и запуск
TypeScript-компилятор (
tsc) транспилирует.ts-файлы в JavaScript, который запускается в Node.js или браузере; для разработки существуют инструменты (ts-node,tsx,esbuild) позволяющие запускать TS-код напрямую.
Зачем нужно
TypeScript не выполняется напрямую — браузер и Node.js понимают только JavaScript. Понимание процесса компиляции, вывода файлов и опций tsconfig позволяет корректно настроить проект и выбрать подходящий workflow для разработки и production.
Где используется
- Сборка production-артефактов перед деплоем
- Проверка типов в CI без сборки (
tsc --noEmit) - Быстрый запуск в разработке через
ts-nodeилиtsx - Интеграция в bundler (Vite, webpack, esbuild)
Основной контент
Базовая компиляция через tsc
# Установка
npm install -D typescript
# Компиляция одного файла
npx tsc index.ts
# Компиляция проекта (по tsconfig.json)
npx tsc
# Только проверка типов без emit файлов
npx tsc --noEmit
# Watch mode
npx tsc --watch
Структура вывода компиляции
src/
index.ts → dist/index.js (+ dist/index.d.ts если declaration: true)
utils/
format.ts → dist/utils/format.js
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "NodeNext",
"outDir": "./dist",
"rootDir": "./src",
"declaration": true,
"sourceMap": true
}
}
Source Maps — отладка TypeScript
{
"compilerOptions": {
"sourceMap": true
// Генерирует .js.map — браузер/Node показывает TS-код при ошибках
}
}
# Запуск с source maps в Node
node --enable-source-maps dist/index.js
ts-node — прямой запуск в разработке
npm install -D ts-node @types/node
# Запуск
npx ts-node src/index.ts
# С конфигурацией (tsconfig-paths и т.п.)
npx ts-node -r tsconfig-paths/register src/index.ts
tsx — быстрая альтернатива ts-node
npm install -D tsx
# Прямой запуск
npx tsx src/index.ts
# Watch mode
npx tsx watch src/index.ts
Компиляция для разных сред
// Для Node.js
{ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext" }
// Для браузера (bundler сам обработает модули)
{ "target": "ES2020", "module": "ESNext", "moduleResolution": "bundler" }
// Для библиотеки (с declaration files)
{ "target": "ES2017", "module": "CommonJS", "declaration": true, "declarationDir": "./types" }
Проверка типов в CI
# package.json
{
"scripts": {
"typecheck": "tsc --noEmit",
"build": "tsc"
}
}
# CI pipeline
npm run typecheck && npm test && npm run build
Частые ошибки
- Запускать
tscбезtsconfig.json— компилятор использует дефолтные настройки, которые могут не соответствовать проекту. - Коммитить
dist/в git — при наличии CI-сборки это лишнее; добавьтеdist/в.gitignore. - Использовать
ts-nodeв production — он медленнее и предназначен для разработки; в production запускайте скомпилированный JS. - Не запускать
tsc --noEmitв CI — bundler (Vite, esbuild) не делает полную проверку типов; нужен отдельный шаг.
Связанные темы
- TypeScript -- установка и настройка
- tsconfig.json -- основные опции
- TypeScript -- что такое и зачем
- _MOC TypeScript