← Назад к вопросам

Как исполняется код на TypeScript?

1.7 Middle🔥 131 комментариев
#Node.js и JavaScript#TypeScript

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Исполнение кода на TypeScript

Основная идея

TypeScript — это язык программирования, который не исполняется напрямую. Вместо этого TypeScript код компилируется (транспилируется) в JavaScript, который потом выполняется JavaScript-движком.

Процесс компиляции

Процесс исполнения TypeScript состоит из двух основных этапов:

1. Компиляция (Transpilation)

Компилятор TypeScript (tsc) преобразует .ts файлы в .js файлы:

// input.ts
const greet = (name: string): string => {
  return `Hello, ${name}!`;
};

greet("World");

После компиляции с tsc получаем:

// output.js
const greet = (name) => {
  return `Hello, ${name}!`;
};

greet("World");

Видно, что типы (string) удалены, так как JavaScript их не понимает.

2. Исполнение

Полученный JavaScript код выполняется обычным JavaScript движком (V8 в Node.js, SpiderMonkey в Firefox и т.д.):

node output.js  # Hello, World!

Этапы компиляции TypeScript

Компилятор TypeScript проходит несколько этапов:

  1. Parsing — разбор кода в Abstract Syntax Tree (AST)
  2. Type Checking — проверка типов (без изменения кода)
  3. Code Generation — трансформация в JavaScript
  4. Emit — запись результата в файлы
// Пример: TypeScript ловит ошибку на этапе Type Checking
const num: number = "string"; // ❌ Error: Type 'string' is not assignable to type 'number'

Работа в Node.js

В Node.js есть несколько способов работать с TypeScript:

1. Прямая компиляция и запуск

tsc index.ts
node index.js

2. ts-node (компиляция on-the-fly)

ts-node index.ts

ts-node компилирует TypeScript в памяти перед исполнением, без промежуточных .js файлов.

3. tsx (модернизированный ts-node)

tsx index.ts

Более быстрая и улучшенная альтернатива ts-node.

Конфигурация компиляции

Поведение компилятора настраивается в tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2020",           // Версия JavaScript
    "module": "commonjs",         // Система модулей
    "strict": true,               // Строгая проверка типов
    "outDir": "./dist",           // Выходная папка
    "rootDir": "./src",           // Исходная папка
    "esModuleInterop": true,      // Совместимость с CommonJS
    "skipLibCheck": true,         // Пропустить проверку типов в node_modules
    "forceConsistentCasingInFileNames": true
  }
}

Важные моменты

  • Типы удаляются полностью — в JavaScript коде нет информации о типах
  • Ошибки типов ловятся только на этапе компиляции — в runtime'е их нет
  • Performance — TypeScript немного замедляет разработку на этапе компиляции, но не влияет на runtime
  • Source maps — для отладки можно генерировать .map файлы, которые связывают JavaScript с исходным TypeScript кодом

Пример полного цикла

// user.ts
interface User {
  id: number;
  name: string;
}

const user: User = { id: 1, name: "Alice" };
console.log(user.name); // Alice

Когда мы запускаем tsc, получаем:

// user.js
const user = { id: 1, name: "Alice" };
console.log(user.name); // Alice

И вот это JavaScript выполняется Node.js-ом.

Таким образом, TypeScript — это compile-time язык, а JavaScript — runtime язык. TypeScript дает нам безопасность типов на этапе разработки, но в production работает обычный JavaScript без каких-либо типов.

Как исполняется код на TypeScript? | PrepBro