Strona główna / Artykuły / Zmieniające się domyślne ustawienia TypeScript 6.0: Praktyczny przewodnik migracji

Zmieniające się domyślne ustawienia TypeScript 6.0: Praktyczny przewodnik migracji

Dowiedz się, które dziewięć domyślnych ustawień kompilatora TypeScript 6.0 uległo zmianie, jak skonfigurować tsconfig na rok 2026 oraz jak przygotować bazy kodu pod TypeScript 7 oparty na Go.

805 słów

Jeśli twoje procesy kompilacji ostatnio zaczęły wyświetlać błędy przy użyciu opcji moduleResolution: node, to nie uszkodziłeś nic po swojej stronie. TypeScript 6.0 cicho zmienił dziewięć domyślnych ustawień kompilatora, a zespoły, które odłożyły aktualizację, teraz napotykają te zmiany jednocześnie. Oto krótka odpowiedź: nie jest to aktualizacja, której można w nieskończoność odkładać. TypeScript 6.0 to ostatnia wersja stworzona na bazie oryginalnego kompilatora opartego na JavaScript. TypeScript 7 to całkowicie nowa wersja napisana w języku Go, a wstępne doniesienia wskazują na prędkość kompilacji nawet 10 razy większą niż obecnie.

Co tak naprawdę się zmieniło

  1. Tryb ścisły jest włączony domyślnie. Każdy nowy projekt tworzony obecnie odziedzicza wartość strict: true bez konieczności dodatkowych ustawień. Jeśli zarządzasz starszym kodem, spodziewaj się licznych nowych informacji diagnostycznych związanych z domyślnymi typami any oraz sprawdzaniami możliwości użycia wartości null, które wcześniej pozostawały niewidoczne.
  2. Domyślny cel kompilacji przesunięto z ES3 na ES2022. Prawie nikt tak naprawdę nie używał wyników kompilacji w formacie ES3, ale jeśli twoja ścieżka przetwarzania nie określała wyraźnie celu, ta zmiana wpływa na to, jaki kod jest generowany przez kompilator domyślnie.
  3. ESM staje się domyślnym systemem modułów. Kod bazujący w dużej mierze na wywołaniach require() wymaga dokładnej analizy swojej strategii modułowej, ponieważ założenia wbudowane w kompilator nie faworyzują już standardu CommonJS.
  • moduleResolution: node jest teraz przestarzały. Zalecane rozwiązanie to przejście na bundler lub nodenext, ponieważ mechanizm rozwiązywania modułów w stylu bundlera odpowiada teraz temu, jak narzędzia takie jak Vite faktycznie rozwiązują moduły w praktyce.
  • --outFile w połączeniu z formatami wyjściowymi AMD, UMD i SystemJS nie jest już obsługiwany. Jeśli twoja konfiguracja nadal używa którychkolwiek z tych formatów, TypeScript 6.0 nie jest jeszcze gotowy dla twojego projektu.
  • Słowo kluczowe assert używane do atrybutów import zostało zastąpione przez with.
  • Zalecana konfiguracja tsconfig na rok 2026

    {
      "compilerOptions": {
        "target": "ES2022",
        "module": "ESNext",
        "moduleResolution": "bundler",
        "isolatedDeclarations": true,
        "strict": true,
        "noUncheckedIndexedAccess": true,
        "exactOptionalPropertyTypes": true,
        "skipLibCheck": true
      }
    }
    

    Zastosowanie tej konfiguracji w kilku średnich projektach React i Next.js w tym kwartale doprowadziło do błędów, które prawie zawsze były rzeczywistymi usterekami, a nie fałszywymi wynikami.

    Nowy flag stableTypeOrdering

    To flagi nie przyciąga wystarczającej uwagi. Normalizuje ona wewnętrzną kolejność związków typów, co oznacza, że różnice pomiędzy wynikami kompilacji z używanego obecnie kompilatora JavaScript a przyszłym kompilatorem opartym na Go mają rzeczywiste znaczenie, a nie są efektem dowolnego przestawiania elementów. Włączenie jej teraz i uzyskanie czystej kompilacji stanowi w praktyce próbny test, który wcześnie sprawdza poprawność twojej bazy kodu przed przejściem na TypeScript 7.

    Znaczenie tego dla zespołów full-stack

    • Odpowiedź edytora na działania użytkownika znacznie się poprawiła, ponieważ usługa językowa jest teraz szybsza od samego kompilatora, a to właśnie z nią stale współpracujesz podczas codziennej pracy nad kodem.
    • Definicje typów w Redux, React i Next.js są coraz bardziej precyzyjne, więc można się spodziewać surowszych reguł inferencji w kodzie zarządzania stanem w miarę aktualizacji tych pakietów.
  • Ekosystem wtyczek jest obecnie niestabilny. Wtyczki kompilatora napisane dla aktualnego kompilatora TypeScript nie będą działać w wersji 7.0, więc jeśli twoje narzędzia od nich zależą, obserwuj ich stan kompatybilności.
  • Praktyczne kroki migracji

    1. Rozpocznij aktualizację na dedykowanej gałęzi rozwojowej, a nie bezpośrednio na głównej linii kodu.
    2. Zrób wywołanie tsc --noEmit i uporządkuj powstałe błędy według częstotliwości występowania danego wzorca w całym kodzie, a nie według tego, który plik je najpierw wykazuje.
    3. Najpierw zajmij się ustawieniem moduleResolution, ponieważ to właśnie ono najczęściej powoduje nieoczekiwane problemy.
    4. Dopiero po tym, jak wszystko inne skompiluje się poprawnie, włącz stableTypeOrdering jako ostateczną potwierdzenie, że migracja przebiegła pomyślnie.

    Zakończenie

    TypeScript 6.0 nie wprowadza spektakularnych nowych funkcji. Reprezentuje on staranne i przemyślane działania naprawcze, które poprzedzają najważniejszą zmianę architektoniczną, jaką język ten zaobserwował od swojego powstania. Przeprowadź tę migrację w przystępnych partiach, póki masz wystarczająco zasobów, by kontrolować proces. Odkładanie jej nie eliminuje pracy – jedynie przesuwa tę samą pracę na późniejszy moment, gdy będziesz miał mniej czasu i większą presję, by ją prawidłowo wykonać.

    Literatura pokrewna

  • Kompilator TypeScript w języku Go i natywna eksploatacja: Przewodnik migracji — Dowiedz się, jak kompilator TypeScript oparty na języku Go oraz natywna eksploatacja w Node.js wpłyną na projekty React i Next.js oraz co należy natychmiast poprawić w pliku tsconfig.
  • Wysyłanie danych za pomocą RTK Query: Praktyczny przewodnik po mutacjach — Naucz się, jak używać funkcji builder.mutation() w RTK Query do wysyłania zapytań typu POST, zarządzania stanami ładowania i błędów oraz tworzenia funkcjonalnego komponentu formularza.
  • Pisanie hooki w React: useState, useEffect, useReducer i custom hooki — Dowiedz się, jak prawidłowo pisać useState, useEffect, useReducer oraz custom hooki w TypeScript, a także kiedy wybór TypeScript zamiast zwykłego JavaScripta faktycznie przynosi korzyści.