Avatar ·

Ошибка "Unknown file extension .ts" при запуске TypeScript через Node.js

Всем привет! Я новичок в TypeScript и пытаюсь запустить свой первый проект. Установил Node.js, создал простой файл `index.ts` с таким кодом: ```typescript const greeting: string = "Hello, World!"; console.log(greeting); ``` Затем выполнил команду в терминале: ```bash node index.ts ``` Но получил ошибку: ``` TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /path/to/index.ts ``` Node.js версии 18, TypeScript установлен глобально через npm. Пытался добавить флаг `--loader ts-node/esm`, но тоже не помогло — вылезла куча других ошибок про модули. Подскажите, пожалуйста, как правильно запускать TypeScript-файлы? Может, нужно что-то дополнительно настраивать? Я просто хочу скомпилировать и запустить простой скрипт, без сложных конфигураций. Пробовал читать документацию, но там всё слишком запутанно для новичка. Что я делаю не так? Нужен ли какой-то специальный файл конфигурации? Я слышал про tsconfig.json, но не понимаю, зачем он нужен для одного файла. Объясните, пожалуйста, пошагово, как запустить простой TypeScript-код на Node.js. <<>>

Почему возникает ошибка и как её исправить

Node.js по умолчанию понимает только JavaScript (.js, .mjs, .cjs). TypeScript — это надстройка над JS, и Node.js не умеет исполнять .ts файлы напрямую. Ошибка "Unknown file extension .ts" возникает именно поэтому.

Есть два основных способа запустить TypeScript-код:

  • Компиляция в JS — преобразовать .ts в .js через компилятор TypeScript (tsc), затем запустить .js файл
  • Запуск "на лету" — использовать специальные инструменты (ts-node, tsx), которые компилируют и запускают .ts файлы в одной команде

Способ 1: Компиляция через tsc (рекомендуется для новичков)

Установите TypeScript локально в проект:

npm init -y
npm install typescript --save-dev

Создайте файл конфигурации tsconfig.json (даже для одного файла он нужен):

npx tsc --init

В сгенерированном файле укажите настройки:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}

Создайте папку src и поместите туда ваш index.ts:

// src/index.ts
const greeting: string = "Hello, World!";
console.log(greeting);

Скомпилируйте и запустите:

npx tsc
node dist/index.js

В папке dist появится скомпилированный index.js, который Node.js выполнит без ошибок.

Способ 2: Запуск через ts-node (быстрый старт)

Установите ts-node:

npm install ts-node --save-dev

Запустите файл напрямую:

npx ts-node src/index.ts

ts-node сам скомпилирует и выполнит код. Для работы с ES-модулями может потребоваться флаг:

npx ts-node --esm src/index.ts

Способ 3: Использование tsx (современная альтернатива)

tsx — более быстрый и простой инструмент:

npm install tsx --save-dev
npx tsx src/index.ts

tsx работает "из коробки" и с CommonJS, и с ES-модулями без лишних настроек.

Важные советы для новичков

  • Всегда устанавливайте TypeScript локально в проект (--save-dev), а не глобально — это избежит конфликтов версий
  • Создавайте tsconfig.json даже для простых проектов — это упростит настройку в будущем
  • Не пытайтесь запускать node index.ts — это не сработает. Используйте npx tsc для компиляции или npx ts-node/npx tsx для прямого запуска
  • Добавьте в package.json скрипты для удобства:
{
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsx src/index.ts"
  }
}

Теперь вы можете запускать:

npm run build     # компиляция
npm run start     # запуск скомпилированного кода
npm run dev       # быстрый запуск через tsx

Ошибка "Unknown file extension .ts" больше не появится — вы будете работать с .js файлами или использовать инструменты, которые умеют обрабатывать TypeScript.

<<>>

Альтернативный подход: использование ES-модулей с Node.js 22+

Если вы используете Node.js версии 22 и выше, можно обойтись без дополнительных инструментов. Node.js начал поддерживать TypeScript через флаг --experimental-strip-types:

node --experimental-strip-types index.ts

Этот флаг заставляет Node.js удалять (strip) типы TypeScript "на лету" и выполнять код как обычный JavaScript. Обратите внимание: проверка типов при этом не выполняется — это просто быстрое "вырезание" типов.

Настройка для постоянного использования

Добавьте в package.json:

{
  "scripts": {
    "start": "node --experimental-strip-types index.ts"
  }
}

Или установите глобально:

npm install -g tsx

И запускайте любой .ts файл командой:

tsx index.ts

Этот метод подходит для быстрых скриптов и прототипов. Для серьёзных проектов всё же рекомендую использовать полноценную компиляцию через tsc с проверкой типов — это поможет избежать ошибок на этапе разработки.

Если вам нужно запускать TypeScript в продакшене, всегда компилируйте в JavaScript — это надёжнее и быстрее.