Галоўная / Артыкулы

Рашынкі ў TypeScript 7: паралельныя пераглядачы, режым стазірання і прасоцінкі API

Калі пераходзіце з TypeScript 6 на натыўны для Go TypeScript 7, што меняецца, як працююць новыя флагі для паралельнай обработкі, і якія інструментальныя комплекты трэба зачакаць пры апдэйті.

Выдавец: REACTAPP.TOP5 хв чытання1244 слоў

Крыніцы: TypeScript 7 vs TypeScript 6: What Actually Changed?

TypeScript 7 — это нечыязвичны выданне большой версіі: сам язык застаецца тым жа, але програма, якая яго пераглядае і кампілюе, была заменена. Для большасці команд апгрэйд прыносіць значны прыбытак у скорасці без неабяжных практык, але для тых команд, чыя інструменты работаюць безпосередна з кампіляторам, гэта можа стаць пераканалом. У гіде пояснюецца, чым на самай працоўна разлічаецца версія 6 і 7, як выкарыстоўваць новыя кантролі паралелізма і як вырашыць, чы хутчэй пераводзіць проект на новую версію, чы то чакаць на наступны выданне.

У блогу вялікім практыкам былі рассказаны прыбыткі ў скорасці, якія даў перапіс на Go і прычыны, чаму перапіс зламаў інструменты для перагляду коду і фрэймворкі, таму тут акцэнт ставлены на практычныя аспекты выбору часу для апгрэйда.

Той самы язык, новы двыжок

На момент напісання цього тексту TypeScript 7.0 выйшаў як стабільная версія (паведамленне пра выход з’явілася 8 ліпня 2026 года; пераканаўцеся з прыміткамі да выходу ўбачыце поточны статус). Цэй — перапісвуванне кампайляра з TypeScript на Go, проект які Microsoft анунсаваў у марце 2025 года під кодовым іменам Corsa. Цэй не ўсё тая ж версія мовы у звычным сэнсе: нема новай синтаксікі, семаніка системы типаў плануецца залишыцца незменнай, а існуючыя файлы .ts не павінны перестаць працаваць. Ваш код застаецца тым самым; зменілася толькі апаратная частка, якая яго обробляе.

Чаму кампайляр павінен быў перапісаны

Да версіі TypeScript 6, уключна, кампайляр быў напісаны на TypeScript і запускаўся на дварчыку JavaScript, што на практыцы означала адна ніт для пераканаўкі типаў. У великіх монорепозітарыях гэта выражалася трома распашчытнымі спосабамі:

  • Рэдактары так дзяўга завантажвалі проект, што разработчыкі научыліся чакаць.
  • Перагляд типаў у CI займаў калькі мінут на кожны запуск.
  • Выкарыстоўванне памяці было настолькі высокім, што ноутбуки значна страждалі пад час роботы.

Команда гадзінныя оптымізавала рэалізацыю на JavaScript і выйшла да заключэння, што вузькія месцы стаяліся саме пад час выканання, а не ў алгорытміх. Таму чэйкер быў перанесены на Go, пры чым стараліся як можно больш заставіць його структуру схожай на існуючы код. Гэты выбар мае значэнне: толькі аддыякватны перанесення, а не перадзялённе, дапамагае зменшыць разніцу ў працэсах межа 6 і 7.

Што разлічна на практыцы

Набліжна шырэйшы перагляд типаў

Публікаваныя Microsoft показнікі адзначаюць меру павышэння якасці: час перакантролювання типаў у кодбазе VS Code зменіўся з 77,8 секунд на 7,5 секунды, тое ў дзесяць разоў быстрэй, а у Playwright — з 11,1 секунд на 1,1 секунды. Гэтага дасягнулі два факторы. Кампайляр тепер працуе як натыўны машынны код у замяну на JavaScript, які выконваецца энжынам, і ён можа выпрацоўваць задачі паралельна за дапамогою горутын, чаго старая однопраменная схема ніколі не магла зрабіць. Вашы саўсемныя показнікі будуць залежаць ад структуры проекта; багато маленькіх незалежных файлаў парадыялізуюцца лепей, чым адна велічезная суматоха з типамі.

Новыя кантроллеры у командной лініі для паралелізму

Файл tsconfig.json не змінюецца, таму што ён описвае мову і проект, а не тое, як кампайляр плануе свою работу. Наведжаная нижэй настройка ўзятая ў вялікай меры падходзіць для обох версій:

// tsconfig.json — nothing changes here, this is the language, not the compiler
{
  "compilerOptions": {
    "strict": true,
    "target": "ES2022"
  }
}

Новыя настройкі выконваюцца через лінію каманд. --checkers задае колькісць працоўнікаў для перапалневай перакантрольвання типаў, --builders керуе колькісцю запускаў практык на адночаснай базе, а --singleThreaded памыкае можлівасць паралелізма цэлкам:

# But at the CLI level, TypeScript 7 gives you real knobs to turn:
tsc --checkers 4        # number of parallel type-checker workers
tsc --builders 2        # parallel project-reference builds
tsc --singleThreaded    # opt out entirely, useful for reproducible CI logs

Режым аднаго потока ўжыткавы, калі трэба детерміністычныя, лёгкія для чытання журналы CI або калі трэба выявіць можлівыя проблемы з порядкам запускаў. На спільных серверах CI, абмежыванне --checkers колькісцю доступных ядраў запобегае перавантажэнню апарату; большая колькісць працоўнікаў таксама значыць большую колькісць памяці, якая викорыстоўваецца адразу, таму краща вимераваць, чым слепа максімізаваць.

Переработаны режым стазірнага спостэрэння

У большых проектах стары ўстрыманнік файлоў, які базаваўся на запытаннях, быў вядомай проблемай — tsc --watch адстаў ад змян у файлах. TypeScript 7 пераносіць падход да ўстрымання файлоў, які викорыстоўваўся ў Parcel, у мову Go, таму перзбудава пачынаецца негайна пасля збережэння, а не адстае.

Простыяшчэнне пакавання

У перыяд прывітарэння для тэставання натыўнаога кампайляра было неабходна інсталаваць окольны пакет @typescript/native-preview. У версіі 7.0 усё зноў належыць да стандартнага назву пакета, таму інсталляцыя выглядае так жа, як і ранейш:

npm install -D typescript

Якщо вы експерыментавалі з прывітарэнням, адключыце той дапаможны пакет і всі скрыпты, якія запускалі його окольны бінар, ўбачыце, што не будзе працаваць два кампайляры.

Настоямыя проблемы: програмны API

Эта частка вяліць няўзабаве апшыянне багаціх апдэйтаў. Інструменты, створаныя на базе API кампайляра TypeScript, такія як плагіны language-service, спецыяльныя правіла лінтингу і кодамоды, яшчэ не можаць павяржацца на стабільны програмны API кампайляра Go версіі 7.0; на момент напісання прыпускаецца, што ён будзе доступны ў празыходжучых выданнях, прычаму як мета называецца версія 7.1. Якщо ваша пайплайн-сістэма выкарыстоўвае ўсё такое, як ts.createProgram() для аналізу програмы, рэштычна пераканайцеся ў правільнасці гэтага падходу пры пераехвате на продакшн-сервісы.

Рэалістычны сценарый міграцыі

Разглянем сярэдняе заўсёды-репозітарые Next.js з прыблізна 40 000 лініяў коду на TypeScript і калькама прамавакоў да іншых проектаў. Пераход на версію 7.0 у такой сетап можа зменшыць час выканання каманды tsc --noEmit з прыблізна 52 секунды да апошней 6. Адзіны такі запуск, які заўсёды эканае 46 секунд, можа здавацца незначным, але гэта стосуецца кожнай задачы CI, кожнага хука пры прадачы коду і кожнай ручной перапалачкі пад час дыбаггавання, і ў сукупнасці це даходзіць да гадзін на тыдзень для цэлага калектыва.

Для проектаў, якія выкарыстоўваюць tsc толькі для перапалачкі і зборкі коду, сам пераход часта выглядае без значных наследкав: падняваецца версія пакета, запускаецца перапалачкі і паўтараецца, што ён праходзіць без змян у коде.

npm install -D typescript@latest
npx tsc --noEmit   # ran clean, zero code changes needed

Чысты запуск — гэта тое, чаго чакаюць, але не гарантія. Зберагачыце рэзультаты з TypeScript 6 для парабярання і аналізу разніцы ў паказаных адказах пасля першага запуску, адколі у такім вялікім репозітарые завжды можна знайсці экстремальныя кейсы.

Чы гэта значыць, што трэба адразу апгрэйдаваць?

  • Апгрэйдавайце зараз, якщо вы вжываеце tsc толькі для перакантролю типаў і стварэння проектаў. Це фактычна простая паслаблення.
  • Чакайце або раздзеліце, якщо вы завісіце ад програмнага API кампайляра через спецыяльныя інструменты, плагіны для рэдагара або кодамоды. Чакайце на стабільны API, але залишыце TypeScript 6 установленым для тых інструментоў, выкананняя 7 для перакантролю.
  • Прыдалейце яму прыорітэт, якщо вы керуеце вельмі большым манорепам, дзе хвілі CI ёсць рэальныя витраты. Эконамія часу можа компенсаваць зусілля па міграцыі за калькі дзён.

Ключовыя выводы

  • TypeScript 7 змінюе кампайляр, а не самы язык; ваш tsconfig.json і файлы-выхаднікі застаюцца без змян.
  • Паспешнае выканання даўаецца за рахунак натыўнага коду і паралельнага перакантролю, які можна налаштаваць за дапамогою --checkers, --builders і --singleThreaded.
  • Галоўныя рызыкі не стояць у вашам кодзе, а ў інструментах, які включаюць кампайляр, таму спачатку пераканаўцеся ў іх стані пры перайшчыні.
  • Якщо повалка працы была вашай главной прычынай незадоволення TypeScript, версія 7 значна яе зменшыла; якщо вы павязаныя з внутрашняй структурой кампайляра, зачакайце ўсё жа адной новай версіі.