Запуск Typescript в Node js без сборки и сложных конфигов
-
Рассмотрим простые способы запуска TypeScript в Node.js без сложных сборок. Во всех примерах используется современный синтаксис ES-модулей.
Бывает нужно просто написать какие-то простые скрипты или проекты, а заморачиваться со сборкой нет желания и особого смысла, но хочется использовать все возможности typescript с подсказками, типами, которые не надо держать в голове, с проверками этих типов уже в IDE.
Стартует, для сначала инициализируем проект
npm init -y npm install typescript @types/node --save-dev
Конфигурация typescript
создаем файл
tsconfig.json
# или сручную touch tsconfig.ts # или через команду tsc # но для этого нужно глобально установить Typescript npm install -g typescript # далее команда tsc --init
вот минимальный конфиг файл, с описанием необходимых параметров
{ "compilerOptions": { // Современный JS без обратной совместимости "target": "ES2022", // Нативные ES-модули Node.js "module": "NodeNext", // Алгоритм разрешения модулей как в Node.js "moduleResolution": "NodeNext", // Совместимость между CommonJS и ES-модулями "esModuleInterop": true, // разрешить импорт ts файлов ( для ts-node и для нативного запуска node --experimental-strip-types) "allowImportingTsExtensions": true, // Максимальная строгость проверки типов "strict": true, // Важно: запрещаем генерацию JS-файлов! "noEmit": true }, // Включаем все TS-файлы в проекте "include": ["**/*.ts"], // Исключаем зависимости "exclude": ["node_modules"] }
Обратите внимание на следующие параметры
- noEmit - мы не будем ничего компилировать, собирать, запускаем
- allowImportingTsExtensions - важный параметр для запуска ts нативным способом (от этом позже) и для ts-node
Исходный код
Теперь напишем максимальной простой код, который просто прочитает наш package.json и покажет поле
"Package name"
index.ts:
import { readFile } from "node:fs/promises"; export async function readConfig() { const data = await readFile("package.json", "utf8"); console.log("Package name:", JSON.parse(data).name); }
index.ts:
import { readConfig } from "./lib.ts"; readConfig();
Запуск через ts-node
устанавливаем локально
npm install ts-node --save-dev
package.json
{ "name": "test", "version": "1.0.0", "scripts": { "start": "ts-node index.ts" }, "keywords": [], "author": "", "license": "ISC", "description": "", "devDependencies": { "@types/node": "^24.0.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" } }
запуск
ts-node index.ts # или через npm npm run start
Замечания
-
"type": "commonjs"
или должен отсутствовать в package.json -
импорт файлов только с расширением .ts
import * from "./lib.ts"
-
поэтому обязательна и настройка
"allowImportingTsExtensions": true
-
типы проверяется!
-
скорость запуска самая неспешная из всех вариантов
Запуск через tsx
устанавливаем локально
npm install tsx --save-dev
package.json
{ "name": "test", "version": "1.0.0", "scripts": { "start": "tsx index.ts" }, "keywords": [], "author": "", "license": "ISC", "description": "", "devDependencies": { "@types/node": "^24.0.0", "tsx": "^4.19.4", "typescript": "^5.8.3" } }
запуск
tsx index.ts # или через npm npm run start
Замечания
-
импорт файлов с расширением .ts/.js
-
типы проверяется!
-
скорость запуска быстрее чем ts-node, но медленнее, чем node --experimental-strip-types
Запуск нативно, через node --experimental-strip-types
обязательно нужна версия Node.js 20.6+
package.json
{ "name": "test", "version": "1.0.0", "scripts": { "start": "node --experimental-strip-types index.ts" }, "keywords": [], "type": "module", "author": "", "license": "ISC", "description": "", "devDependencies": { "@types/node": "^24.0.0", "typescript": "^5.8.3" } }
запуск
tsx index.ts # или через npm npm run start
Замечания
-
"type": "module"
в package.json -
импорт файлов только с расширением .ts
import * from "./lib.ts"
-
поэтому обязательна и настройка
"allowImportingTsExtensions": true
-
типы НЕ проверяется!
-
самая быстрая скорость запуска
Итого
Метод Проверка типов Скорость Требования ts-node ️ Средняя
npm i ts-node tsx Быстрая
npm i tsx node --experimental-strip-types Очень быстрая
Node.js 20.6+ Начиная с версии Node.js 24 флаг –experimental-strip-types будет использован по умолчанию
-
Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?
-
Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?
Пользователь @kirilljs написал в Запуск Typescript в Node js без сборки и сложных конфигов:
Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?
Он крякнет, но также как и ТС скрипт, т.к у тс нет рантайма, для проверки типов, для есть специальные библиотеки, типа zod.
Если ты написал что-то в тс не правильно, то все запустится и ошибки не покажутся, но в ide линтеры должны писать о проблемах. В маленьких проектах за этим легко следить
Короче в больших проектах я бы крайне не рекомендовал такую схему запуска
© 2024 - 2025 RosDesk, Inc. Все права защищены.