0Pricing
TypeScript Academy · Lektion

Narrowing mit instanceof und in

Grenzen Sie Klasseninstanzen und Objektstrukturen ein.

Narrowing mit instanceof und in ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Willkommen

`instanceof` grenzt Klasseninstanzen ein, während `in` Objekttypen anhand des Vorhandenseins einer Eigenschaft eingrenzt. Beide sind unverzichtbar für die Arbeit mit komplexen Unions.

Eingrenzung mit instanceof

Verwenden Sie `instanceof`, um zu prüfen, ob ein Wert eine Instanz einer Klasse ist. TypeScript grenzt den Typ auf diese Klasse ein.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof mit benutzerdefinierten Klassen

instanceof funktioniert auch mit Ihren eigenen Klassen.
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 funktioniert nicht mit Schnittstellen

Schnittstellen werden zur Laufzeit entfernt. Sie können instanceof nicht mit einer Schnittstelle verwenden – nur mit Klassen.

Der in-Operator

Verwenden Sie `in`, um zu prüfen, ob eine Eigenschaft in einem Objekt vorhanden ist. TypeScript grenzt die Union auf Mitglieder ein, die diese Eigenschaft besitzen.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

in-Eingrenzung mit optionalen Eigenschaften

`in` grenzt auch bei optionalen Eigenschaften ein – auf die Union-Mitglieder, bei denen die Eigenschaft vorhanden sein KANN.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

instanceof und in kombinieren

Sie können beide Eingrenzungstechniken für eine komplexe Typunterscheidung kombinieren.
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 für diskriminierte Union-Typen

Wenn Union-Mitglieder keinen Diskriminator besitzen, können in-Prüfungen denselben Zweck bei der Eingrenzung erfüllen.
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 in catch-Blöcken

Verwenden Sie instanceof in catch-Blöcken, um Fehlertypen zu unterscheiden.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

Object.prototype-Prüfung im Vergleich zu in

Sowohl `key in obj` als auch `Object.prototype.hasOwnProperty.call(obj, key)` prüfen, ob eine Eigenschaft vorhanden ist. `in` berücksichtigt jedoch auch geerbte Eigenschaften.

Priorität bei der Eingrenzung

Wenn mehrere Eingrenzungsprüfungen zutreffen, bildet TypeScript die Intersection der eingegrenzten Typen und ermittelt so den spezifischsten möglichen Typ.

Kurzer Test

Warum können Sie `instanceof` in TypeScript nicht verwenden, um einen Schnittstellentyp einzugrenzen?

Zusammenfassung

`instanceof` grenzt Klasseninstanzen zur Laufzeit ein. `in` grenzt Objekt-Unionen anhand des Vorhandenseins von Eigenschaften ein. Verwenden Sie beide Techniken bei der Arbeit mit Klassenhierarchien und strukturellen Objekt-Unionen.

Häufig gestellte Fragen

Ist die Lektion „Narrowing mit instanceof und in“ kostenlos?

Ja — der vollständige Text von „Narrowing mit instanceof und in“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Narrowing mit instanceof und in“?

Grenzen Sie Klasseninstanzen und Objektstrukturen ein. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Narrowing mit instanceof und in“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Narrowing mit typeof und Truthiness
  2. Narrowing mit instanceof und in
  3. Benutzerdefinierte Type-Guard-Funktionen
  4. Vollständigkeitsprüfung mit never
← Zurück zu TypeScript Academy