Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
Рейтинг: 20.8% · 3 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
Дозрели наконец и переехали с 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 вёл себя странно, иногда пересобирал лишнее.
✔ Лучший ответ сформирован автоматически — rawmonk
Добавлю приземлённое: посчитайте экономию на CI, это хороший аргумент для лида. У нас после переезда пайплайн на каждый MR стал короче примерно на 6 минут стенного времени, а CPU-минут экономится около сорока на прогон — при нашем потоке мержей самосборные раннеры перестали стоять в очереди по вечерам. Из подводных: запиньте точную версию в package.json и обновляйтесь осознанно, у нативных сборок…
Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
Могу подтвердить по части редактора: у нас Next-проект на ~400k строк, tsserver стабильно отваливался по OOM на машинах с 8 ГБ, людям приходилось перезапускать окно по несколько раз в день. На нативном LSP холодный старт 3-4 секунды вместо сорока, автокомплит в больших юнионах перестал лагать. А смерть ts-patch я бы вообще записал в плюсы — сколько магических трансформеров умерло, столько же неотлаживаемых багов ушло вместе с ними.
Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
@k8s2000, Я бы не торопился тащить это в прод всем подряд. У нас при попытке переезда легла половина тулчейна: старый ts-jest, внутренний генератор API-клиентов на ts-morph — а ts-morph работает поверх старого JS API и с семёркой не дружит в принципе. В итоге держим 5.9 как основную версию, а tsgo гоняем параллельной джобой в CI как канарейку: типы проверяет, упадёт — разберёмся заранее. Когда экосистема догонит, переключим основную. Месяца через три, думаю.
- grpc_veteran
- Сообщения: 13
- Зарегистрирован: 11 май 2026, 00:51
Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
Про project references: мы пошли радикальнее и выкинули их совсем. Смысл references был в том, чтобы не пересобирать всё, потому что tsc медленный. А tsgo настолько быстрый, что проще держать один корневой tsconfig и гонять плоский типчек на всю монорепу: у нас 800+ тысяч строк проверяются за ~25 секунд на раннере с 8 vCPU. Никакого .tsbuildinfo, кеширование на уровне turbo по хешу входов. Граф зависимостей стал проще, конфигов меньше, странностей с инкрементальностью ноль.
Re: Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
✔ Лучший ответ — сформирован автоматически
Добавлю приземлённое: посчитайте экономию на CI, это хороший аргумент для лида. У нас после переезда пайплайн на каждый MR стал короче примерно на 6 минут стенного времени, а CPU-минут экономится около сорока на прогон — при нашем потоке мержей самосборные раннеры перестали стоять в очереди по вечерам. Из подводных: запиньте точную версию в package.json и обновляйтесь осознанно, у нативных сборок минорки пока живее обычного — поведение резолва paths нам один раз меняли под ногами.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- TypeScript нативный компилятор на Go (tsc-go) — ждём 10x или рано радоваться?
10 ответов · 1018 просмотров
-
-
- WireGuard режут DPI за минуту, перешёл на VLESS+Reality — делюсь граблями
18 ответов · 755 просмотров
-
-
- TypeScript ошибка Type string is not assignable to type never как исправить
9 ответов · 21 просмотров
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость