Новий компілятор TypeScript 7 на базі Go, tsgo, уже спричиняє збої в роботі популярних інструментів розробки, таких як ESLint, ts-jest та ts-morph. Ці проблеми триватимуть до моменту стабілізації програмного API компілятора у майбутньому релізі 7.1, тому командам, які покладаються на ці інструменти, варто призупинити будь-які плани щодо оновлення.

Що змінилося в TypeScript 7

У цьому релізі представлено tsgo — порт перевірки типів на мові Go, який команда TypeScript отримала кодову назву Project Corsa. Завдяки перенесенню ядра з JavaScript на Go компілятор може забезпечувати збірки до десяти разів швидше — ця новина привернула увагу перших користувачів, які прагнуть скоротити час виконання CI-конвеєрів.

Чому інструменти не працюють

Інструменти, що працюють із TypeScript, не взаємодіють із перевіркою типів напряму. Вони викликають набір внутрішніх API, які надають інформацію про типи, діагностику та обхід AST. Ці API були переписані для tsgo і залишатимуться в стані незавершеності до версії 7.1. Результатом є каскад збоїв та прихованих помилок:

  • typescript-eslint – npm відмовляється встановлювати його разом із TypeScript 7; примусове встановлення призводить до помилки TypeError в ESLint.
  • ts-jest – намагається викликати внутрішні методи, яких більше не існує в Go-версії, що призводить до переривання трансформації тестових файлів.
  • ts-morph – очікує на стабільний API для обходу структури коду; з поточним API він може повертати неправильні результати або завершуватися помилкою без попередження.
  • Monorepos – tsgo ігнорує певні параметри узагальнених типів (generic type parameters), що призводить до помилок типізації, які з'являються лише у великих багатопакетних проєктах.

Будь-який робочий процес, що поєднує лінтинг, тестування Jest або аналіз коду з TypeScript 7, швидше за все, призведе до «червоних» збірок.

Кого це стосується

  • Фронтенд-команди, які запускають ESLint як частину кожного pull request.
  • Бекенд-сервіси, які використовують ts-jest для модульного тестування.
  • Бібліотеки, що використовують ts-morph для генерації коду або документації.
  • Організації з монорепозиторіями, де виведення типів (type inference) вже є складним.

Якщо ваш CI-конвеєр став «червоним» після оновлення TypeScript, причиною, ймовірно, є один із перелічених вище факторів.

Безпечний шлях міграції до версії 7.1

Найпростіший спосіб зберегти переваги у швидкості, не порушуючи роботу інструментів, — це відокремити швидкий етап перевірки типів від безпосередньої збірки:

  1. Зафіксуйте основну версію TypeScript на 6.x – це забезпечить стабільний API, на який очікують усі інструменти.
  2. Додайте @typescript/native-preview як dev-залежність – цей пакет містить бінарний файл tsgo для швидкої перевірки типів у CI.
  3. Запускайте tsgo з прапорцем --noEmit для швидких перевірок – він перевіряє типи, але не створює вихідних файлів.
  4. Використовуйте класичний компілятор tsc для основних збірокtsc все ще генерує JavaScript і дотримується API версії 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

Оновіть скрипти у вашому package.json:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

Завдяки такій подвійній конфігурації ви збережете десятикратне прискорення в CI, забезпечуючи при цьому сумісність із ESLint, ts-jest та ts-morph.

Коли можна оновлюватися безпосередньо до 7.0

Якщо ваша кодова база використовує лише tsc — без лінтингу, Jest або ts-morph — тоді нестабільний API вас не зачепить. У такому вузькому сценарії ви можете негайно перейти на TypeScript 7 і насолоджуватися підвищенням продуктивності без додаткових кроків.

На що варто звернути увагу

  • Версія 7.1 – команда TypeScript повідомила, що програмний API буде зафіксовано в цьому релізі. Як тільки він вийде, міст між tsgo та існуючими інструментами зникне, що дозволить здійснити чисте оновлення.
  • Оновлення інструментів – стежте за новими релізами typescript-eslint, ts-jest та ts-morph. Вони опублікують сумісні версії невдовзі після виходу 7.1.
  • Конфігурація CI – не забудьте замінити tsgo --noEmit на звичайний виклик tsc, коли API стабілізується; пакет preview більше не знадобиться.

Підсумок: До моменту фіксації API у версії 7.1 залишайтеся на TypeScript 6.x як на основному компіляторі, додайте @typescript/native-preview для швидких перевірок і продовжуйте використовувати tsc для збірок. Це дозволить уникнути проблем із лінтингом і тестуванням, водночас отримуючи переваги продуктивності нового двигуна на Go.