0Pricing
TypeScript Academy · Lekcja

Zawężanie za pomocą instanceof i in

Zawężaj typy instancji klas i kształtów obiektów.

Zawężanie za pomocą instanceof i in to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 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.

Wprowadzenie

`instanceof` zawęża typy instancji klas, a `in` zawęża typy obiektowe na podstawie obecności właściwości. Oba operatory są niezbędne podczas pracy ze złożonymi uniami.

Zawężanie za pomocą instanceof

Użyj `instanceof`, aby sprawdzić, czy wartość jest instancją klasy. TypeScript zawęzi typ do tej klasy.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof z własnymi klasami

instanceof działa również z własnymi klasami.
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

instanceof nie działa z interfejsami

Interfejsy są usuwane podczas działania programu. Nie można używać instanceof z interfejsem — tylko z klasami.

Operator in

Użyj `in`, aby sprawdzić, czy właściwość istnieje w obiekcie. TypeScript zawęża unię do elementów, które mają tę właściwość.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

Zawężanie za pomocą in z opcjonalnymi właściwościami

`in` zawęża również w przypadku opcjonalnych właściwości — zawęża unię do elementów, w których właściwość MOŻE istnieć.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

Łączenie instanceof i in

Można łączyć obie techniki zawężania, aby rozróżniać złożone typy.
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

in w uniach dyskryminowanych

Gdy elementy unii nie mają dyskryminantu, sprawdzenia `in` mogą służyć do tego samego celu, co zawężanie.
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof w blokach catch

Używaj instanceof w blokach catch do rozróżniania typów błędów.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

Sprawdzanie Object.prototype a in

Zarówno `key in obj`, jak i `Object.prototype.hasOwnProperty.call(obj, key)` sprawdzają istnienie właściwości, ale `in` uwzględnia również właściwości odziedziczone.

Priorytet zawężania

Gdy obowiązuje wiele sprawdzeń zawężających, TypeScript przecina zawężone typy, uzyskując najbardziej szczegółowy możliwy typ.

Szybkie sprawdzenie

Dlaczego nie można użyć `instanceof` do zawężenia typu interfejsu w TypeScript?

Podsumowanie

`instanceof` zawęża instancje klas podczas działania programu. `in` zawęża unie obiektów na podstawie istnienia właściwości. Używaj obu operatorów podczas pracy z hierarchiami klas i strukturalnymi uniami obiektów.

Często zadawane pytania

Czy lekcja „Zawężanie za pomocą instanceof i in” jest bezpłatna?

Tak — pełny tekst „Zawężanie za pomocą instanceof i in” 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 „Zawężanie za pomocą instanceof i in”?

Zawężaj typy instancji klas i kształtów obiektów. Ć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 4.

Ile czasu zajmuje lekcja „Zawężanie za pomocą instanceof i in”?

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. Zawężanie za pomocą typeof i wartości logicznych
  2. Zawężanie za pomocą instanceof i in
  3. Funkcje predykatów typów definiowane przez użytkownika
  4. Sprawdzanie kompletności za pomocą never
← Powrót do TypeScript Academy