Как запустить 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-файлы.