TypeScript 7 to jedna z największych zmian inżynieryjnych w historii tego języka, choć większość programistów nadal będzie pisać kod TypeScript niemal tak samo jak wcześniej. Wydana w lipcu 2026 roku nowa generacja zastępuje dotychczasową implementację kompilatora działającą jako JavaScript natywną wersją napisaną w Go. Celem nie było przeprojektowanie składni TypeScript ani wprowadzenie nowego modelu programowania, lecz usunięcie ograniczeń wydajnościowych, które stawały się coraz bardziej odczuwalne w dużych bazach kodu. Microsoft informuje o znacznym skróceniu czasu kompilacji, szybszej reakcji edytorów oraz niższym zużyciu pamięci w wielu rzeczywistych projektach. Dla zespołów odpowiadających za monorepozytoria, rozbudowane aplikacje frontendowe lub usługi obejmujące tysiące plików TypeScript różnica może być istotna. Migracja nie jest jednak całkowicie automatyczna. TypeScript 7 utrwala również zmiany konfiguracji wprowadzone w okresie TypeScript 6, usuwa kilka starszych opcji i tymczasowo zmienia sposób, w jaki niektóre narzędzia programistyczne mogą współpracować z kompilatorem.
Najważniejszą rzeczą, którą trzeba zrozumieć w przypadku TypeScript 7, jest to, że przejście na Go stanowi przede wszystkim zmianę implementacji, a nie samego języka TypeScript. Microsoft nie stworzył po prostu innego kompilatora o podobnym zachowaniu. Zespół systematycznie przeniósł strukturę dotychczasowego kompilatora i logikę sprawdzania typów tak, aby projekty działające poprawnie w TypeScript 6 zwykle otrzymywały takie same wyniki kontroli typów również w TypeScript 7. Ma to szczególne znaczenie dla dużych organizacji, ponieważ szybszy kompilator byłby znacznie mniej przydatny, gdyby jego wdrożenie wymagało przepisywania logiki aplikacji. W typowych plikach TypeScript interfejsy, typy generyczne, unie, dekoratory oraz codzienna kontrola typów działają w dobrze znany sposób.
Najbardziej widoczną różnicą jest szybkość. Opublikowane przez Microsoft pomiary pokazują, że pełne kompilacje są zwykle około ośmiu do dwunastu razy szybsze niż w TypeScript 6. W jednym z testów kodu Visual Studio Code czas spadł ze 125,7 sekundy do 10,6 sekundy. W przypadku Sentry zmniejszył się ze 139,8 do 15,7 sekundy, a dla Playwright z 12,8 do 1,47 sekundy. Nie należy traktować tych wartości jako gwarancji identycznego przyspieszenia w każdym projekcie. Znaczenie mają struktura kompilacji, sprzęt, sposób wykorzystania referencji między projektami, rozmiar zależności oraz liczba dostępnych rdzeni procesora. Wyniki te pokazują jednak, że poprawa nie ogranicza się do syntetycznych benchmarków ani niewielkich projektów demonstracyjnych.
Poprawiło się również wykorzystanie pamięci. W testach Microsoftu zmniejszenie łącznego zużycia pamięci wynosiło od około 6% w przypadku Sentry do 26% dla Bluesky, a inne projekty mieściły się pomiędzy tymi wartościami. W praktyce może mieć to szczególne znaczenie w środowiskach ciągłej integracji, gdzie ograniczenia pamięci często wpływają na rozmiar i koszt maszyn wykorzystywanych do kompilacji. Szybsza informacja zwrotna nie ogranicza się także do pracy z wierszem poleceń. Microsoft zmierzył czas od otwarcia problematycznego pliku w kodzie Visual Studio Code do pojawienia się pierwszego błędu. W starszym kompilatorze trwało to około 17,5 sekundy, podczas gdy TypeScript 7 potrzebował mniej niż 1,3 sekundy. Dla programistów pracujących w bardzo dużych repozytoriach oznacza to, że kontrola kodu znacznie rzadziej przerywa normalny rytm pracy.
Go pozwala zespołowi TypeScript korzystać z natywnego pliku wykonywalnego oraz znacznie efektywniej rozdzielać pracę pomiędzy wiele rdzeni procesora. Poprzedni kompilator był napisany w TypeScript i następnie uruchamiany jako JavaScript. Rozwiązanie to sprawdzało się bardzo dobrze przez wiele lat, ale utrudniało stosowanie niektórych metod równoległego przetwarzania ze współdzieloną pamięcią. TypeScript 7 może rozdzielać zadania takie jak parsowanie, sprawdzanie typów czy generowanie plików wynikowych pomiędzy kilka procesów roboczych. Domyślna konfiguracja korzysta z czterech procesów sprawdzających typy, natomiast zespoły posiadające wydajniejsze maszyny mogą testować większą ich liczbę. Jest to szczególnie istotne w dużych repozytoriach, gdzie kompilator może lepiej wykorzystać sprzęt, który wcześniej w niektórych etapach kompilacji pozostawał częściowo bezczynny.
Przetwarzanie równoległe jest tylko jednym z elementów tej zmiany. TypeScript 7 otrzymał również przebudowany tryb obserwowania plików, co ma duże znaczenie dla zespołów utrzymujących kompilator uruchomiony podczas edycji kodu. Nowa implementacja wykorzystuje rozwiązania związane z obserwowaniem plików wywodzące się z technologii używanej przez Parcel i ma ograniczać zbędne zużycie zasobów w najważniejszych systemach operacyjnych. Integracja z edytorami również została skierowana w stronę Language Server Protocol, czyli LSP. Zapewnia on edytorom bardziej standardowy sposób komunikacji z usługami TypeScript i pozwala sprawniej obsługiwać wiele zapytań. Funkcje takie jak wyszukiwanie odwołań, podpowiedzi kodu, diagnostyka, importy czy nawigacja mogą dzięki temu korzystać z natywnej implementacji, zamiast ograniczać wzrost wydajności wyłącznie do kompilacji produkcyjnych.
Nie oznacza to, że zespoły tworzące aplikacje muszą uczyć się Go albo utrzymywać kod napisany w tym języku. Instalacja aktualnego pakietu TypeScript nadal udostępnia dobrze znane polecenie tsc, a programiści nadal pracują z plikami .ts, .tsx oraz plikami konfiguracyjnymi. W okresie testów natywny kompilator był często określany jako tsgo, ale w TypeScript 7 nie jest to już standardowa nazwa polecenia. Osobne repozytorium wykorzystywane podczas przenoszenia kompilatora zostało zarchiwizowane we wrześniu 2026 roku, a dalszy rozwój wrócił do głównego repozytorium TypeScript. Dla większości programistów Go pozostaje więc szczegółem implementacyjnym. Jego znaczenie wynika z tego, że pozwala kompilatorowi wykonywać dotychczasowe zadania znacznie szybciej.
Największym ryzykiem migracji często nie jest samo przepisanie kompilatora na Go. TypeScript 7 świadomie przejmuje zmiany związane z TypeScript 6 i traktuje kilka wcześniej przestarzałych zachowań jako błędy. Microsoft zaleca więc potraktowanie TypeScript 6 jako etapu przygotowawczego przed przejściem na TypeScript 7. Projekt, który kompiluje się bez problemów zgodnie z nowszymi zasadami TypeScript 6, jest znacznie bliższy bezpiecznej migracji. Zespoły przechodzące bezpośrednio z TypeScript 5.x lub jeszcze starszej wersji w praktyce wykonują dwa uaktualnienia jednocześnie: najpierw muszą uwzględnić zmiany konfiguracji i kompatybilności wprowadzone w TypeScript 6, a następnie przejść na natywny kompilator. Rozdzielenie tych etapów ułatwia ustalenie, czy dany problem wynika z nieaktualnej konfiguracji, czy z nowej generacji kompilatora.
Przed zmianą wersji w dużym repozytorium warto sprawdzić kilka nowych ustawień domyślnych. TypeScript 7 domyślnie włącza zachowania związane z strict, używa esnext jako domyślnego ustawienia modułów i aktywuje noUncheckedSideEffectImports. Domyślny rootDir wskazuje teraz katalog samego projektu, dlatego repozytoria, które wcześniej polegały na automatycznym ustalaniu katalogu źródłowego, mogą wymagać jawnego ustawienia wartości takiej jak ./src. Domyślna wartość types jest również pustą listą. Oznacza to, że projekty wcześniej automatycznie otrzymujące globalne deklaracje z zainstalowanych pakietów @types mogą teraz wymagać jawnego wskazania na przykład Node albo używanego frameworka testowego. Każda z tych zmian jest niewielka, ale w monorepozytorium zawierającym dziesiątki lub setki plików tsconfig.json trzeba przejrzeć je systematycznie.
Starsze opcje kompilatora mogą powodować bardziej widoczne problemy. TypeScript 7 nie obsługuje już kompilacji do ES5, dawnych trybów rozwiązywania modułów node lub node10, klasycznego mechanizmu rozwiązywania modułów ani starszych formatów takich jak AMD, UMD czy SystemJS. Wieloletnie ustawienie baseUrl również nie jest już obsługiwane w swojej dotychczasowej formie, dlatego mapowania ścieżek mogą wymagać zapisania względem katalogu projektu. Projekty nie mogą także wyłączać esModuleInterop, allowSyntheticDefaultImports ani części zachowań trybu ścisłego w sposób znany ze starszych konfiguracji. Nowoczesna aplikacja może już nie korzystać z żadnej z tych opcji, ale repozytorium rozwijane przez osiem lub dziesięć lat może nadal zawierać je w dziedziczonych plikach konfiguracyjnych, których programiści na co dzień niemal nie otwierają.
TypeScript 7.0 ma istotne ograniczenie dotyczące narzędzi, które wykorzystują TypeScript jako bibliotekę zamiast jedynie uruchamiać tsc: wydanie 7.0 nie zapewnia tradycyjnego Compiler API. Łatwo to przeoczyć, ponieważ zwykła kompilacja z wiersza poleceń może działać prawidłowo, podczas gdy inny element środowiska nadal próbuje importować wewnętrzne funkcje TypeScript z poziomu JavaScript. Lintery, niestandardowe narzędzia analizy kodu, integracje systemu budowania oraz firmowe skrypty mogą zależeć od tego API. Migracja dużego projektu powinna więc obejmować inwentaryzację narzędzi otaczających kompilator, a nie tylko sprawdzenie, czy sama aplikacja przechodzi kompilację. Microsoft pracuje nad nowym API dla generacji TypeScript 7.1, ale zespoły nie powinny zakładać, że dotychczasowi użytkownicy starego API automatycznie będą zgodni z wersją 7.0.
Microsoft udostępnia rozwiązanie przejściowe dla projektów, które przez pewien czas muszą korzystać z obu generacji. Pakiet zgodności @typescript/typescript6 udostępnia kompilator i API TypeScript 6 równolegle z TypeScript 7. Dzięki temu zespół może wykorzystywać natywne tsc z TypeScript 7 do standardowej kontroli projektu, podczas gdy narzędzie nadal zależne od starszego programistycznego API może pozostać przy TypeScript 6. Aliasy npm pomagają również wtedy, gdy konkretna zależność oczekuje pakietu o nazwie typescript. Takie środowisko mieszane nie jest tak proste jak korzystanie wszędzie z jednej wersji, ale jest znacznie bezpieczniejsze niż wymuszanie migracji wszystkich narzędzi w ramach jednego wdrożenia. Pozwala też zacząć korzystać z korzyści wydajnościowych TypeScript 7, zanim wszystkie zależności zakończą własne dostosowanie.
Szczególnej ostrożności wymagają projekty korzystające z języków osadzonych i wyspecjalizowanych integracji. Microsoft wskazuje, że środowiska związane z Vue, MDX, Astro i Svelte mogą nadal potrzebować TypeScript 6, jeżeli ich narzędzia korzystają bezpośrednio z integracji z kompilatorem. Podobna sytuacja może występować w projektach Angular w przypadku specjalistycznego sprawdzania szablonów. Zespół może więc poprawnie uruchamiać TypeScript 7 z wiersza poleceń, a jednocześnie zachować TypeScript 6 dla części obsługi edytora lub narzędzi frameworka. Jest to problem zgodności narzędzi, a nie dowód na to, że sam kod TypeScript nie nadaje się do wersji 7. Przed zmianą dużego repozytorium należy przetestować rzeczywiste rozszerzenia frameworka, integrację z edytorem, konfigurację lintingu, narzędzia testowe i cały używany proces budowania, zamiast uznawać poprawne wykonanie tsc za jedyny warunek powodzenia migracji.

Kontrolowana migracja powinna rozpocząć się jeszcze przed instalacją TypeScript 7. Najpierw warto przenieść projekt na najnowszą odpowiednią wersję TypeScript 6 i w miarę możliwości usunąć przestarzałe ustawienia konfiguracji. Następnie należy zapisać dotychczasowy czas kompilacji, maksymalne zużycie pamięci, liczbę diagnostyk oraz długość procesu ciągłej integracji. Przydatne jest również zmierzenie, jak długo programiści czekają na pierwsze informacje diagnostyczne edytora w jednym lub dwóch reprezentatywnych dużych obszarach roboczych. Takie pomiary tworzą punkt odniesienia i zapobiegają ocenianiu migracji wyłącznie na podstawie subiektywnych odczuć. Dobrze wykonane przejście powinno zachować oczekiwane działanie kompilatora i jednocześnie przynieść mierzalną poprawę w tych częściach procesu, które rzeczywiście mają znaczenie dla zespołu.
Następnie TypeScript 7 warto wprowadzić na osobnej gałęzi albo początkowo tylko w wybranych projektach, zamiast zmieniać całe monorepozytorium jednym commitem. Należy uruchomić istniejące kontrole TypeScript 6 oraz kompilator TypeScript 7 dla tej samej wersji kodu i porównać zgłaszane błędy. Pliki tsconfig.json trzeba przeanalizować od konfiguracji głównej aż po pliki ją dziedziczące, zwracając szczególną uwagę na rootDir, types, rozwiązywanie modułów, cele kompilacji oraz starsze ustawienia ścieżek. Jeżeli repozytorium generuje JavaScript albo pliki deklaracji publikowane i wykorzystywane przez inne projekty, warto również porównać te wyniki. Celem nie jest uzyskanie identycznych bajt po bajcie plików w każdej sytuacji, lecz upewnienie się, że użytkownicy zależności nadal otrzymują oczekiwane typy publiczne i zachowanie w czasie działania.
Konfigurację ciągłej integracji należy następnie dostosować do zasobów dostępnych na maszynach wykonujących kompilację. TypeScript 7 domyślnie korzysta z czterech procesów sprawdzających typy, co jest rozsądną wartością dla wielu środowisk, ale nie zawsze będzie ustawieniem optymalnym. Zwiększenie liczby procesów może przyspieszyć duże kompilacje na maszynach dysponujących wolną mocą CPU, natomiast jej zmniejszenie może być korzystniejsze na mniejszych runnerach, gdzie dodatkowe procesy konkurują o pamięć. TypeScript 7 pozwala także wykonywać kilka kompilacji projektów opartych na referencjach równolegle. Ustawienia te mogą wzajemnie zwiększać obciążenie, dlatego w monorepozytorium należy je dobierać na podstawie pomiarów, zamiast automatycznie wybierać najwyższe dostępne wartości. Znaczenie ma również spójność: stosowanie jednej przetestowanej konfiguracji w środowiskach programistycznych i CI ogranicza ryzyko trudnych do wyjaśnienia różnic pomiędzy nimi.
Najbardziej czytelnym sygnałem udanej migracji nie jest samo pojawienie się TypeScript 7 w pliku zależności. Programiści powinni zauważyć krótszy czas oczekiwania na kontrolę typów, szybszą reakcję edytora i sprawniejsze etapy CI, bez jednoczesnego pojawienia się dużej liczby niezrozumiałych diagnostyk. Microsoft opublikował imponujące przykłady, w tym przypadek Slacka, gdzie raportowany etap sprawdzania typów skrócił się z około 7,5 minuty do około 1,25 minuty. Każde repozytorium ma jednak własne wąskie gardła. Jeżeli większość procesu budowania zajmuje pakowanie zasobów, testy albo generowanie kodu, dziesięciokrotnie szybsze tsc nie skróci dziesięciokrotnie całego procesu. Najbardziej użytecznym wskaźnikiem jest czas rzeczywiście usunięty z czynności, które programiści powtarzają wiele razy w ciągu dnia.
Zespoły nie powinny również traktować migracji jako okazji do jednoczesnej zmiany wszystkich powiązanych narzędzi. Duże repozytoria łatwiej ustabilizować, gdy zmianę kompilatora, aktualizacje frameworków, modyfikacje lintingu i przebudowę systemu budowania rozdziela się tam, gdzie jest to możliwe. Jeżeli narzędzie zależne od Compiler API nadal potrzebuje TypeScript 6, tymczasowe uruchamianie go obok TypeScript 7 jest rozsądnym stanem przejściowym. Po sprawdzeniu nowego kompilatora w CI i codziennej pracy można niezależnie zająć się pozostałymi problemami kompatybilności. Etapowe podejście ułatwia także wycofanie pojedynczej zmiany: jeżeli jedna integracja sprawia problemy, zespół może zmienić właśnie ją bez rezygnowania z poprawy wydajności osiągniętej w pozostałych częściach projektu.
W październiku 2026 roku TypeScript 7.0.2 jest aktualnym stabilnym wydaniem npm, tymczasowe repozytorium wykorzystywane podczas przenoszenia kompilatora do Go zostało zarchiwizowane, a aktywne prace wróciły do głównego repozytorium TypeScript. Prace nad TypeScript 7.1 mają rozwiązać istotny element pozostałej części przejścia poprzez wprowadzenie nowego programistycznego API. W przypadku dużych projektów nie ma już większego powodu, aby traktować TypeScript 7 jako eksperymentalny kompilator, ale nie oznacza to również, że migrację warto wykonywać bez przygotowania. Najbezpieczniejszy wariant to rozpoczęcie od uporządkowanego środowiska TypeScript 6, przetestowanie wszystkich ważnych elementów zestawu narzędzi, stopniowe przenoszenie projektów oraz mierzenie wyników. Przy takim podejściu przejście na kompilator napisany w Go staje się przede wszystkim poprawą wydajności, a nie destabilizującym przepisywaniem aplikacji.