Как запускать TypeScript файлы из командной строки?
Почему нельзя просто запустить .ts файл через Node.js?
Node.js по умолчанию понимает только JavaScript. TypeScript — это надстройка над JS, которая добавляет статическую типизацию, но сам Node.js не умеет обрабатывать синтаксис TypeScript (например, аннотации типов : string). Поэтому перед запуском TypeScript нужно либо скомпилировать в JavaScript, либо использовать специальный инструмент, который делает это "на лету".
Способ 1: Компиляция через tsc и запуск через node (рекомендуется для продакшена)
Это классический подход. Вы компилируете TypeScript в JavaScript, а затем запускаете получившийся .js файл.
Шаг 1. Установите TypeScript глобально:
npm install -g typescript
Шаг 2. Скомпилируйте ваш файл:
tsc hello.ts
После этого в той же папке появится файл hello.js — это скомпилированный JavaScript код без типов.
Шаг 3. Запустите скомпилированный файл:
node hello.js
Вывод: Привет, Мир!
Более удобный вариант с tsconfig.json:
Создайте файл tsconfig.json в корне проекта:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"strict": true
},
"include": ["src/**/*"]
}
Теперь поместите ваш hello.ts в папку src, и запустите:
tsc
node dist/hello.js
Команда tsc без указания файла использует настройки из tsconfig.json и компилирует все файлы из src в dist.
Способ 2: Использование ts-node (рекомендуется для разработки)
ts-node — это утилита, которая компилирует TypeScript в JavaScript "на лету" и сразу передаёт результат в Node.js. Это очень удобно для быстрого запуска скриптов.
Шаг 1. Установите ts-node глобально:
npm install -g ts-node
Шаг 2. Запустите .ts файл напрямую:
ts-node hello.ts
Вывод: Привет, Мир!
Локальная установка (без глобальной):
Если вы не хотите устанавливать инструменты глобально, установите их локально в проект:
npm init -y
npm install --save-dev typescript ts-node
Теперь для запуска используйте npx:
npx ts-node hello.ts
Способ 3: Использование Node.js с флагом --loader (Node.js 22+)
Начиная с Node.js 22, можно использовать встроенную поддержку TypeScript через экспериментальный загрузчик. Создайте файл tsconfig.json (обязательно), и запустите:
node --experimental-strip-types hello.ts
Этот флаг заставляет Node.js удалять типы из TypeScript перед выполнением. Однако этот метод всё ещё экспериментальный и может не поддерживать все возможности TypeScript.
Сравнение подходов
- tsc + node — лучший выбор для продакшена: даёт полный контроль над компиляцией, оптимизацией и структурой выходных файлов.
- ts-node — идеально для разработки и быстрых экспериментов: не нужно каждый раз компилировать вручную.
- --experimental-strip-types — удобно для простых скриптов, но не для серьёзных проектов из-за экспериментального статуса.
Важно: Для всех способов (кроме последнего) Node.js должен быть установлен на вашем компьютере. Проверить версию можно командой node -v.
Альтернативный подход: использование tsx
tsx (TypeScript Execute) — это более современная и быстрая альтернатива ts-node. Она основана на esbuild, что делает её значительно быстрее, особенно для больших проектов.
Установка:
npm install -g tsx
Запуск:
tsx hello.ts
Преимущества tsx перед ts-node:
- Быстрее компилирует код (использует esbuild вместо tsc).
- Не требует предварительной настройки tsconfig.json (хотя поддерживает его).
- Отлично работает с ESM (ES модулями) и CommonJS.
- Может запускать .ts файлы напрямую из package.json скриптов.
Пример package.json:
{
"scripts": {
"start": "tsx src/index.ts",
"dev": "tsx watch src/index.ts" // автоматический перезапуск при изменениях
}
}
Если вы работаете с современными проектами или просто хотите максимальную производительность при разработке, рекомендую попробовать tsx вместо ts-node.