Как исполняется код на TypeScript?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Исполнение кода на 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 проходит несколько этапов:
- Parsing — разбор кода в Abstract Syntax Tree (AST)
- Type Checking — проверка типов (без изменения кода)
- Code Generation — трансформация в JavaScript
- 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 без каких-либо типов.