TypeScript Academy · Lekcja

in, instanceof i unie rozróżniane

Używanie sprawdzania in/właściwości, instanceof dla klas oraz unii rozróżnianych do bezpiecznego rozgałęziania kodu

Lekcja 2 z 38 kroki

in, instanceof i unie rozróżniane to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 3. 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 3 lekcji w sumie.

Wprowadzenie

Cel: Przećwiczyć trzy skuteczne mechanizmy ochronne: in do sprawdzania właściwości, instanceof dla klas oraz unii dyskryminowane do przejrzystego rozgałęziania.

Operator in

in zawęża typ, sprawdzając nazwę właściwości w czasie wykonywania. Doskonale sprawdza się w przypadku unii literałów obiektowych.

type HasLength = { length: number };

function print(v: string | HasLength) {
  if ("length" in v) {
    // v is HasLength
    console.log("len:", v.length);
  } else {
    // v is string
    console.log(v.toUpperCase());
  }
}

print({ length: 3 });
print("ts");

instanceof

instanceof sprawdza prototypy wartości opartych na klasach. Działa, gdy konstruktor jest dostępny w czasie wykonywania.

class Person {
  constructor(public name: string) {}
}

function hello(x: Person | Date) {
  if (x instanceof Person) {
    console.log("Hi", x.name);
  } else {
    console.log("Year", x.getFullYear());
  }
}

hello(new Person("Ada"));
hello(new Date(2024, 0, 1));

Unia dyskryminowana

Unie dyskryminowane używają literału pełniącego funkcję znacznika (np. kind), aby umożliwić przejrzyste przełączanie z pełnym zawężaniem dla każdego przypadku.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
  }
}

console.log(area({ kind: "circle", radius: 2 }));
console.log(area({ kind: "square", size: 3 }));

Łączenie mechanizmów ochronnych

Należy łączyć sprawdzanie znaczników z in, aby zawężać zagnieżdżone kształty i uzyskiwać dostęp wyłącznie do bezpiecznych składowych.

type FetchOk = { status: "ok"; data: { length: number } };
type FetchErr = { status: "error"; message: string };

type Result = FetchOk | FetchErr;

function handle(r: Result) {
  if (r.status === "ok" && "length" in r.data) {
    console.log("items:", r.data.length);
  } else {
    console.log("error:", r.message);
  }
}

handle({ status: "ok", data: { length: 5 } });
handle({ status: "error", message: "oops" });

Wskazówki

Wskazówki:

  • Należy używać in dla unii opartych na właściwościach.
  • Należy używać instanceof z klasami.
  • Należy używać unii dyskryminowanych do przejrzystego sterowania przepływem.

Sprawdzenie operatora in

Szybkie sprawdzenie: Który operator sprawdza właściwość w czasie wykonywania i zawęża typy?

Podsumowanie

Podsumowanie: in sprawdza właściwości, instanceof sprawdza klasy, a unie dyskryminowane zapewniają przejrzyste przełączanie z bezpieczeństwem typów.

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 „in, instanceof i unie rozróżniane” jest bezpłatna?

Tak — pełny tekst „in, instanceof i unie rozróżniane” 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 3 lekcji w sumie.

Co nauczysz się w „in, instanceof i unie rozróżniane”?

Używanie sprawdzania in/właściwości, instanceof dla klas oraz unii rozróżnianych do bezpiecznego rozgałęziania kodu Ć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 2 z 3.

Ile czasu zajmuje lekcja „in, instanceof i unie rozróżniane”?

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. typeof, równość i zawężanie przez truthiness
  2. in, instanceof i unie rozróżniane
  3. Kompletność z never — wprowadzenie
← Powrót do TypeScript Academy