Как запустить TypeScript из командной строки: 3 рабочих способа

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как запустить TypeScript из командной строки: от простого к профессиональному

Вы написали свой первый скрипт на TypeScript. Всё выглядит красиво: строгая типизация, лаконичный синтаксис, автодополнение в IDE. Но когда вы открываете терминал и набираете node script.ts, Node.js выдаёт ошибку. Знакомо?

TypeScript — это надстройка над JavaScript, и Node.js не умеет выполнять .ts файлы напрямую. В этой статье мы разберём все реальные способы запустить TypeScript из командной строки. Вы узнаете, чем отличается быстрый запуск от production-сборки, когда использовать ts-node, а когда — tsx, и как не запутаться в инструментах.

Мы опираемся на популярный вопрос со Stack Overflow (более 500 тысяч просмотров), но даём не просто ответ, а полноценное сравнение подходов. Поехали!

Почему Node.js не понимает TypeScript?

Прежде чем бежать за инструментами, давайте разберёмся в сути. Когда вы пишете:

const greet = (name: string): string => {
  return `Hello, ${name}!`;
};
console.log(greet('PythonLib'));

Node.js видит : string и не понимает, что с этим делать. JavaScript не поддерживает статическую типизацию как часть синтаксиса. Поэтому TypeScript нужно сначала транспилировать (превратить) в JavaScript, а уже потом запускать.

Есть два принципиально разных подхода:

  • Двухшаговый: сначала компиляция tsc script.ts, потом запуск node script.js.
  • Одношаговый: использование утилит, которые делают оба действия за вас «на лету» (JIT-компиляция).

Мы рассмотрим оба варианта, но начнём с самого популярного — одношагового.

Способ 1: ts-node — классика жанра

ts-node — это TypeScript execution engine для Node.js. Он компилирует код в памяти и сразу передаёт его Node.js. Это самый старый и проверенный способ запустить TypeScript из командной строки без лишних телодвижений.

Установка и запуск

npm install -g ts-node typescript @types/node
ts-node script.ts

Всё. Ваш файл выполнится без создания промежуточного JS-файла. Под капотом ts-node использует стандартный компилятор TypeScript (tsc), но делает это прозрачно для разработчика.

Пример: работа с API

// api-demo.ts
import axios from 'axios';

interface Post {
  userId: number;
  id: number;
  title: string;
}

async function fetchFirstPost(): Promise<Post> {
  const response = await axios.get<Post>('https://jsonplaceholder.typicode.com/posts/1');
  return response.data;
}

fetchFirstPost().then(post => console.log(post.title));
// Вывод: sunt aut facere repellat provident occaecati excepturi optio reprehenderit

Запускаем: ts-node api-demo.ts. Результат — сразу в консоли.

Плюсы и минусы ts-node

  • + Простота: одна команда вместо двух.
  • + Поддержка tsconfig.json: все ваши настройки TypeScript учитываются.
  • + REPL: команда ts-node без аргументов открывает интерактивную оболочку TypeScript.
  • - Скорость: при каждом запуске происходит компиляция, на больших проектах это заметно.
  • - Потребление памяти: при долгой работе (например, в watch-режиме) может «кушать» RAM.

Когда использовать: для скриптов, прототипов, небольших утилит. Если вам нужно запустить TypeScript файл из командной строки быстро и без настройки — ts-node ваш выбор.

Способ 2: tsx — современный и быстрый наследник

tsx (TypeScript Execute) — это более новая утилита, построенная на esbuild. Если ts-node компилирует через tsc, то tsx использует esbuild — сверхбыстрый бандлер на Go. Разница в скорости может достигать 10–20 раз.

Установка и запуск

npm install -g tsx
tsx script.ts

Минималистично, правда? Не нужно ставить typescript отдельно — tsx тянет его как зависимость.

Сравнение скорости: tsx vs ts-node

Вот простой тест для файла с 1000 строк кода:

// speed-test.ts
const start = Date.now();
for (let i = 0; i < 1000; i++) {
  const x: number = Math.sqrt(i);
}
console.log(`Time: ${Date.now() - start}ms`);
  • ts-node speed-test.ts — ~850ms (включая компиляцию)
  • tsx speed-test.ts — ~120ms (включая компиляцию)

Разница колоссальная. Особенно это заметно, когда вы разрабатываете и запускаете скрипты десятки раз в день.

Плюсы и минусы tsx

  • + Молниеносная скорость за счёт esbuild.
  • + Не требует отдельной установки TypeScript.
  • + Отлично работает с ESM (ES Modules) и CommonJS.
  • + Встроенный watch-режим: tsx watch script.ts.
  • - Меньше сообщество, чем у ts-node.
  • - Некоторые специфические возможности TypeScript (например, декораторы экспериментальные) могут работать нестабильно.

Когда использовать: для повседневной разработки, частых запусков, скриптов с большим количеством кода. Если вы выбираете, как запустить TypeScript из командной строки в 2024 году — tsx часто рекомендуют как более современный стандарт.

Способ 3: Классический двухшаговый подход (tsc + node)

Иногда «старый способ» — лучший. Если вы работаете над серьёзным проектом, который идёт в продакшен, вам в любом случае нужно компилировать TypeScript в JavaScript. Почему бы не делать это явно?

Шаг 1: Компиляция

npx tsc script.ts --outDir dist

Флаг --outDir dist указывает папку для выходных файлов. Если у вас есть tsconfig.json, можно просто:

npx tsc

Компилятор прочитает настройки и создаст JS-файлы.

Ш

Блоги

Рекомендаций по книгам