Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

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

Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение nissenos »

Долго откладывал, на этой неделе наконец завёл на рабочем проекте нативный превью TypeScript — тот самый порт компилятора на Go, который в итоге станет TS 7. Монорепа: pnpm workspaces, 14 пакетов, суммарно около 310 тысяч строк TS.

Ставится без приключений:

Код: Выделить всё

pnpm add -D @typescript/native-preview
pnpm tsgo --project tsconfig.json --noEmit
Цифры на моей машине (Ryzen 7 5800X, 32 ГБ):
— tsc 5.9: 78 секунд холодный прогон, пик памяти ~3.2 ГБ
— tsgo: 9 секунд, ~1.1 ГБ

В CI (self-hosted GitLab-раннеры) разница ещё заметнее: tsgo раскидывает работу по всем ядрам, а классический tsc упирается в одно.

Что отвалилось:
1. ts-patch с кастомным трансформером — мимо, плагины компилятора не поддерживаются и, судя по всему, не будут.
2. Пара легаси-мест на experimentalDecorators ругнулась — переписали на стандартные декораторы, давно пора было.
3. В VS Code LSP включается флагом typescript.experimental.useTsgo: go to definition летает, но переименование символа пару раз промахнулось по .vue-файлам у соседней команды.

Пока оставил двойной прогон: tsgo как быстрый гейт на каждый пуш, старый tsc — ночной контрольный. Кто ещё гоняет? Какие грабли собрали?
👍 ❤️2 🔥1 😄 🤔
✔ Лучший ответ сформирован автоматически — VueMaster
Несколько уточнений, а то в таких тредах быстро рождаются мифы. 1. Это не «переписали компилятор с нуля», а близкий к построчному порт. Поэтому поведение совпадает почти один в один: мы прогнали diff списка ошибок между tsc 5.9 и tsgo на проекте в 600+ файлов — ноль расхождений, включая порядок выводимых типов в сообщениях. 2. Ускорение не «потому что Go магический». Три кита: настоящая многопото…
Перейти к ответу →
Аватара пользователя
elixir2010
Сообщения: 18
Зарегистрирован: 31 май 2026, 22:10

Re: Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение elixir2010 »

9 секунд это красиво, но я бы не торопился. У нас половина тулчейна сидит на Compiler API: кодген клиентов из OpenAPI через ts-morph, кастомные правила typescript-eslint в type-checked режиме. Всё это пока живёт на старом tsc, и когда переедет — вопрос открытый. В итоге получается зоопарк из двух компиляторов, которые ещё и версиями могут разъехаться. Подожду стабильного TS 7, благо тайпчек у нас и так минуту занимает, не горит.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
VueMaster
Сообщения: 33
Зарегистрирован: 12 май 2026, 07:28

Re: Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение VueMaster »

✔ Лучший ответ — сформирован автоматически
Несколько уточнений, а то в таких тредах быстро рождаются мифы.

1. Это не «переписали компилятор с нуля», а близкий к построчному порт. Поэтому поведение совпадает почти один в один: мы прогнали diff списка ошибок между tsc 5.9 и tsgo на проекте в 600+ файлов — ноль расхождений, включая порядок выводимых типов в сообщениях.

2. Ускорение не «потому что Go магический». Три кита: настоящая многопоточность (парсинг и чек идут параллельно по файлам), компактные структуры данных без миллиона мелких объектов и отсутствие накладных расходов JS-рантайма. Отсюда и память вдвое-втрое ниже.

3. Про плагины выше верно: старого Compiler API не будет, взамен обещают API поверх LSP. Всем, кто на ts-morph и кастомных трансформерах, придётся ждать миграции инструментов — это сейчас главный тормоз внедрения, а не сам компилятор.

4. Практический совет: неделю-две гоняйте оба компилятора в CI и сравнивайте exit code и список ошибок, потом выкидывайте медленный. Заодно перестанете задирать max-old-space-size для ноды под старый tsc.
👍1 ❤️1 🔥 😄1 🤔
Аватара пользователя
juniorredteam
Сообщения: 66
Зарегистрирован: 11 май 2026, 07:16

Re: Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение juniorredteam »

А кто-нибудь щупал с Vue/Nuxt? vue-tsc же по сути обёртка над API старого tsc, подозреваю, там всё грустно.
👍1 ❤️ 🔥 😄1 🤔
Аватара пользователя
regexlover
Сообщения: 18
Зарегистрирован: 21 май 2026, 11:59

Re: Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение regexlover »

Подтверждаю цифры. Next.js-проект на ~90 тысяч строк: тайпчек шёл 31 секунду, tsgo делает за 4. На M1 Air даже вентилятор не включается (шутка, его там нет — но раньше корпус грелся ощутимо). Памяти вдвое меньше. Из минусов: watch-режим в превью сыроват, иногда не подхватывает правки tsconfig — лечится рестартом, но в потоке раздражает.
👍1 ❤️ 🔥1 😄2 🤔
Аватара пользователя
peekatwo
Сообщения: 38
Зарегистрирован: 12 май 2026, 03:30

Re: Перевёл монорепу на tsgo (нативный TypeScript): тайпчек с 78 секунд до 9, но есть нюансы

Сообщение peekatwo »

Грустно, но движется: команда Vue пилит интеграцию под новый API, в превью уже можно потыкать, для прода рано. Мы на Nuxt 4 пока остались на vue-tsc и ждём как манны небесной — тайпчек идёт 4 минуты, дольше, чем все юнит-тесты вместе взятые. Когда доедет, это будет самое большое ускорение DX за последние годы, побольше всяких новых фреймворков.
👍1 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

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

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

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