Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Рейтинг: 20.8% · 3 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
lost300z
Сообщения: 77
Зарегистрирован: 11 май 2026, 04:27

Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Сообщение lost300z »

Дозрели наконец и переехали с 5.9 на семёрку — ту самую, где компилятор переписан на Go. Монорепа: ~60 пакетов, pnpm + turborepo, React/Next, суммарно около 700 тысяч строк. Было: полный tsc --build на CI (4 vCPU) — 3:10, локально на M1 Pro — около 2:20, и это при том, что транспиляцию давно делает esbuild, tsc только проверял типы и генерил d.ts. Стало: полный типчек 14-18 секунд, watch-режим реагирует практически мгновенно, а нативный LSP в VS Code перестал отжирать 4 гига — сидит в районе 700 МБ и не подвисает на жирных файлах с дженериками. Теперь грабли, чтобы вы не наступали. Первое: всё, что жило через ts-patch и кастомные трансформеры, мертво — компилятор больше не на JS, старого programmatic API нет. Мы выкинули typescript-transform-paths и просто навели порядок в exports у пакетов, давно надо было. Второе: часть тулинга тянет typescript как peer dependency и хочет старый API — typescript-eslint обновился нормально, а вот api-extractor у нас завёлся не сразу, пришлось пересматривать генерацию деклараций. Третье: в паре мест семёрка строже вывела типы на enum и declaration merging — починилось за вечер, но в diff было неожиданно. Вопрос к залу: кто уже гоняет в проде --build с project references? У нас инкрементальный кеш через .tsbuildinfo вёл себя странно, иногда пересобирал лишнее.
👍3 ❤️1 🔥1 😄 🤔1
✔ Лучший ответ сформирован автоматически — rawmonk
Добавлю приземлённое: посчитайте экономию на CI, это хороший аргумент для лида. У нас после переезда пайплайн на каждый MR стал короче примерно на 6 минут стенного времени, а CPU-минут экономится около сорока на прогон — при нашем потоке мержей самосборные раннеры перестали стоять в очереди по вечерам. Из подводных: запиньте точную версию в package.json и обновляйтесь осознанно, у нативных сборок…
Перейти к ответу →
Аватара пользователя
k8s2000
Сообщения: 85
Зарегистрирован: 11 май 2026, 00:27

Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Сообщение k8s2000 »

Могу подтвердить по части редактора: у нас Next-проект на ~400k строк, tsserver стабильно отваливался по OOM на машинах с 8 ГБ, людям приходилось перезапускать окно по несколько раз в день. На нативном LSP холодный старт 3-4 секунды вместо сорока, автокомплит в больших юнионах перестал лагать. А смерть ts-patch я бы вообще записал в плюсы — сколько магических трансформеров умерло, столько же неотлаживаемых багов ушло вместе с ними.
👍1 ❤️ 🔥2 😄 🤔1
Аватара пользователя
roero
Сообщения: 23
Зарегистрирован: 11 май 2026, 05:17

Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Сообщение roero »

@k8s2000, Я бы не торопился тащить это в прод всем подряд. У нас при попытке переезда легла половина тулчейна: старый ts-jest, внутренний генератор API-клиентов на ts-morph — а ts-morph работает поверх старого JS API и с семёркой не дружит в принципе. В итоге держим 5.9 как основную версию, а tsgo гоняем параллельной джобой в CI как канарейку: типы проверяет, упадёт — разберёмся заранее. Когда экосистема догонит, переключим основную. Месяца через три, думаю.
👍2 ❤️1 🔥 😄 🤔
Аватара пользователя
grpc_veteran
Сообщения: 13
Зарегистрирован: 11 май 2026, 00:51

Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Сообщение grpc_veteran »

Про project references: мы пошли радикальнее и выкинули их совсем. Смысл references был в том, чтобы не пересобирать всё, потому что tsc медленный. А tsgo настолько быстрый, что проще держать один корневой tsconfig и гонять плоский типчек на всю монорепу: у нас 800+ тысяч строк проверяются за ~25 секунд на раннере с 8 vCPU. Никакого .tsbuildinfo, кеширование на уровне turbo по хешу входов. Граф зависимостей стал проще, конфигов меньше, странностей с инкрементальностью ноль.
👍 ❤️1 🔥 😄 🤔
Аватара пользователя
rawmonk
Сообщения: 7
Зарегистрирован: 11 май 2026, 04:08

Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями

Сообщение rawmonk »

✔ Лучший ответ — сформирован автоматически
Добавлю приземлённое: посчитайте экономию на CI, это хороший аргумент для лида. У нас после переезда пайплайн на каждый MR стал короче примерно на 6 минут стенного времени, а CPU-минут экономится около сорока на прогон — при нашем потоке мержей самосборные раннеры перестали стоять в очереди по вечерам. Из подводных: запиньте точную версию в package.json и обновляйтесь осознанно, у нативных сборок минорки пока живее обычного — поведение резолва paths нам один раз меняли под ногами.
👍 ❤️1 🔥1 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Веб-разработка»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей