2. TypeScript ломает zero-deps и замедляет цикл разработки
Компиляция — это цена. Даже если ты её не замечаешь. Для запуска TS-кода тебе нужно:
- tsconfig.json;
- транспиляция (tsc, swc, esbuild);
- типы зависимостей (@types/…);
- поддержка ESM или CommonJS;
- линтер с типами;
- конфиг для тестов, алиасов, runtime-импорта.
Каждый шаг — точка отказа. Любое несовпадение версий, любые нестыковки — и пайплайн падает.
Zero-deps становится невозможен: язык требует инфраструктуру.
Даже с Node.js v23.6.0, где TypeScript встроен на уровне рантайма, остаётся всё то же: конфигурация, типы, source maps, IDE-интеграция.
Это не «убрали сборку». Это встроили другой сборщик. Бремя осталось. Чистый JS запускается сразу. TS — только после обвязки. Дольше цикл разработки
TypeScript ломает быстрый цикл:
написал → запустил → исправил → повторил.
Становится: написал → собрал → подправил конфиг → проверил типы → запустил → проверил пути → дебажил через мапы → исправил → пересобрал.
Каждый шаг замедляет итерации. Особенно в системных проектах, где:
- код быстро меняется;
- архитектура нестабильна;
- важна предсказуемость запуска.
Ухудшение DX
Developer Experience — это не «удобно писать код в IDE». Это: быстро читать, быстро запускать, быстро менять.
С TS:
- IDE может не видеть типы до полной сборки;
- tsc может упасть из-за файла, к которому ты не прикасался;
- линтеры требуют доп. плагинов и синхронизации с tsconfig;
- ошибки появляются там, где их нет на runtime. **TS вставляет прослойку между мыслью и результатом. JS — работает напрямую.
Отладка — через боль**
TypeScript ломает прозрачность рантайма:
- source maps не всегда точные;
- стеки уводят в dist/, не в исходник;
- console.log работает не там, где ты пишешь;
- hot reload требует костылей;
- для запуска кода из ./src тебе нужно убедиться, что ./dist актуален.
Тормозит командную работ Любой merge может:
- поломать сборку;
- привести к конфликту типов;
- зацепить @types/…, которые подтянулись транзитивно;
- потребовать пересогласования alias.
Проект перестаёт быть “просто нодой”. Он превращается в конвейер, который надо всё время чинить
Что в итоге?
TypeScript даёт мнимую стабильность на длинном горизонте. Но за это ты платишь: скоростью, простотой, прозрачностью.
Если ты пишешь system-level tooling, оркестратор, сервер или CLI — TypeScript может быть не помощником, а помехой. Чем ближе к ядру — тем важнее zero-deps. И тем дороже каждая секунда, потерянная на сборку.