Avatar ·

Как запускать TypeScript файлы из командной строки?

Всем привет! Я только начал изучать TypeScript и столкнулся с проблемой. Написал простой скрипт на TypeScript, но не могу его запустить через командную строку. Пробовал команду `node myfile.ts`, но Node.js выдает ошибку, что не может понять синтаксис TypeScript. Вот мой код: ```typescript // hello.ts function greet(name: string): string { return `Привет, ${name}!`; } const message = greet('Мир'); console.log(message); ``` Когда я запускаю `node hello.ts`, получаю ошибку: ``` SyntaxError: Unexpected token ':' at wrapSafe (internal/modules/cjs/loader.js:...) ``` Я понимаю, что Node.js не поддерживает TypeScript нативно, но как тогда правильно запускать .ts файлы? Слышал про ts-node, но не уверен, как его установить и использовать. Может быть есть другие способы? Нужно ли сначала компилировать в JavaScript? Объясните пожалуйста пошагово, как запустить 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.