TypeScript Academy · Lekcja

TypeScript 5.3–5.4: nowe zawężanie i NoInfer

Stosuj narzędzie NoInfer oraz nowe zawężanie switch/case.

Lekcja 3 z 413 kroki

TypeScript 5.3–5.4: nowe zawężanie i NoInfer to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Przegląd TypeScript 5.3

TypeScript 5.3 (z listopada 2023 roku) wprowadził ulepszone zawężanie typów w instrukcjach switch/case, obsługę typu importu w JSDoc oraz tryb rozwiązywania w import type.

// npm install typescript@5.3

Ulepszone zawężanie w switch/case

TS 5.3 ulepszył zawężanie typów w instrukcjach switch, szczególnie w przypadku unii z rozróżnikiem obejmujących wiele przypadków.

type Result = { status: "ok"; data: string } | { status: "err"; code: number };

function handle(r: Result) {
  switch (r.status) {
    case "ok":
      console.log(r.data);   // r: { status: "ok"; data: string } — narrowed
      break;
    case "err":
      console.log(r.code);   // r: { status: "err"; code: number } — narrowed
      break;
  }
}

import type w JSDoc

TS 5.3 dodał obsługę tagu JSDoc @import do importowania wyłącznie typów w plikach JavaScript.

/** @import { User } from "./types.js" */

/** @param {User} user */
function greet(user) {
  console.log(user.name);
}

resolution-mode w import type

TS 5.3 pozwala określić resolution-mode w import type, aby kontrolować, czy import zostanie rozwiązany jako CommonJS, czy ESM.

import type { User } from "some-library" with { "resolution-mode": "require" };

Przegląd TypeScript 5.4

TypeScript 5.4 (z marca 2024 roku) wprowadził pomocniczy typ NoInfer, zachowywanie zawężenia typów w domknięciach oraz typy Object.groupBy i Map.groupBy.

// npm install typescript@5.4

Pomocniczy typ NoInfer<T>

NoInfer uniemożliwia TypeScriptowi użycie argumentu generycznego jako miejsca wnioskowania, wymuszając wnioskowanie typu wyłącznie na podstawie innych argumentów.

function createStore<T>(initial: T, onChange: (val: NoInfer<T>) => void) {
  // T inferred from initial, not from onChange callback
}

createStore({ count: 0 }, (val) => {
  // val: { count: number } — inferred from initial only
});

Dlaczego NoInfer ma znaczenie

Bez NoInfer TypeScript próbowałby wywnioskować T na podstawie obu argumentów i mógłby nieoczekiwanie poszerzyć typ.

// Before NoInfer: T may be widened by the callback
function createStore<T>(initial: T, onChange: (val: T) => void) {}
createStore({ count: 0 }, (val: { count: number; extra: string }) => {});
// T widened to include extra — not what we want

Zachowywanie zawężenia po utworzeniu domknięć

TS 5.4 zachowuje zawężenie typu w domknięciach, gdy po utworzeniu domknięcia zawężona zmienna nie jest przypisywana ponownie.

function process(val: string | null) {
  if (!val) return;
  // val: string
  setTimeout(() => {
    console.log(val.toUpperCase()); // TS 5.4: still string — not widened
  }, 100);
}

Typowanie Object.groupBy

TS 5.4 dodał typy dla statycznych metod Object.groupBy i Map.groupBy z ES2024.

const users = [
  { name: "Alice", role: "admin" },
  { name: "Bob", role: "user" },
];
const grouped = Object.groupBy(users, (u) => u.role);
// grouped: { [role: string]: { name: string; role: string }[] }

Ulepszone generowanie deklaracji

TS 5.4 ulepszył generowanie plików deklaracji w złożonych przypadkach obejmujących typy mapowane i warunkowe, ograniczając liczbę fałszywych błędów w generowanych plikach .d.ts.

// Fewer "Type ... is not assignable to type ..." errors
// in generated declaration files from TS 5.4 onward

Podsumowanie: TS 5.3–5.4

TS 5.3: ulepszone zawężanie w switch/case oraz obsługa JSDoc @import. TS 5.4: NoInfer do blokowania niepożądanych miejsc wnioskowania, zachowywanie zawężenia w domknięciach oraz typy Object.groupBy.

Szybkie sprawdzenie

Czemu zapobiega NoInfer?

Czego się Państwo nauczyli

TS 5.3 ulepszył zawężanie w switch/case i dodał typy importów JSDoc. TS 5.4 wprowadził NoInfer do kontrolowania miejsc wnioskowania, zachowywanie zawężenia w domknięciach oraz typy Object.groupBy z ES2024.

Bezpłatny start

Ucz się TypeScript dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
101
Lekcje
352

Często zadawane pytania

Czy lekcja „TypeScript 5.3–5.4: nowe zawężanie i NoInfer” jest bezpłatna?

Tak — pełny tekst „TypeScript 5.3–5.4: nowe zawężanie i NoInfer” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „TypeScript 5.3–5.4: nowe zawężanie i NoInfer”?

Stosuj narzędzie NoInfer oraz nowe zawężanie switch/case. Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „TypeScript 5.3–5.4: nowe zawężanie i NoInfer”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. TypeScript 5.0: standard dekoratorów i parametry typów const
  2. TypeScript 5.1–5.2: ulepszone wnioskowanie
  3. TypeScript 5.3–5.4: nowe zawężanie i NoInfer
  4. TypeScript 5.5+: izolowane deklaracje i dalsze zmiany
← Powrót do TypeScript Academy