0Pricing
Frontend Academy · Lektion

Interfaces und Objekttypen

Beschreiben Sie Objektstrukturen mit interface und type, erweitern Sie Interfaces, verwenden Sie optionale Eigenschaften mit ? und readonly für Unveränderlichkeit.

Interfaces und Objekttypen ist eine kostenlose Frontend Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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 Frontend Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Frontend Academy-Kurs umfasst insgesamt 4 Lektionen.

interface vs type

Sowohl interface als auch type beschreiben Objektstrukturen. Der wichtigste Unterschied: Interfaces können zusammengeführt werden (Declaration Merging) und werden im Allgemeinen bevorzugt, um Strukturen öffentlicher APIs zu definieren. Typ-Aliase sind bei komplexen Typen flexibler.

// interface:
interface User {
  id: number;
  name: string;
}

// type alias (equivalent for objects):
type User = {
  id: number;
  name: string;
};

Ein Interface definieren

Verwenden Sie interface, um die Struktur eines Objekts zu definieren. Standardmäßig sind alle Eigenschaften erforderlich. Trennen Sie Eigenschaften durch Semikolons.

interface Product {
  id: number;
  name: string;
  price: number;
  description: string;
  inStock: boolean;
  category: string;
}

Optionale und schreibgeschützte Eigenschaften

Kennzeichnen Sie Eigenschaften mit ? als optional. Verwenden Sie readonly, um Änderungen zu verhindern. Readonly erzwingt Unveränderlichkeit zur Kompilierungszeit.

interface Config {
  host: string;
  port?: number;          // optional: number | undefined
  readonly apiKey: string; // can't change after assignment
}

const config: Config = { host: 'localhost', apiKey: 'abc' };
config.port = 8080;       // OK
config.apiKey = 'new';    // Error: readonly

Interfaces erweitern

Verwenden Sie extends, um ein neues Interface zu erstellen, das alle Eigenschaften eines anderen Interfaces enthält. Mehrfachvererbung wird unterstützt.

interface Animal {
  name: string;
  sound(): string;
}

interface Dog extends Animal {
  breed: string;
  fetch(): void;
}

interface ServiceDog extends Dog {
  task: string;
}

Indexsignaturen – dynamische Schlüssel

Wenn Sie die Eigenschaftsnamen im Voraus nicht kennen, aber deren Werttypen bekannt sind, verwenden Sie eine Indexsignatur.

interface StringMap {
  [key: string]: string;
}

const headers: StringMap = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer token123'
};

// Also for translating:
interface Translations {
  [locale: string]: { [key: string]: string };
}

Funktionstypen in Interfaces

Definieren Sie Methodensignaturen innerhalb eines Interfaces – sowohl die Kurzform als auch die vollständige Eigenschaftssyntax funktionieren.

interface Logger {
  log(message: string): void;
  warn(message: string): void;
  error(message: string, err?: Error): void;
}

// Also valid:
interface Logger2 {
  log: (message: string) => void;
}

Interfaces in Klassen implementieren

Eine Klasse kann ein oder mehrere Interfaces implement. TypeScript überprüft, ob die Klasse alle erforderlichen Member bereitstellt.

interface Serialisable {
  serialise(): string;
  deserialise(data: string): this;
}

class User implements Serialisable {
  constructor(public name: string) {}
  serialise() { return JSON.stringify({ name: this.name }); }
  deserialise(data: string) {
    const obj = JSON.parse(data);
    return new User(obj.name) as this;
  }
}

Declaration Merging

Mehrere interface-Deklarationen mit demselben Namen werden zu einem Interface zusammengeführt. Das ist nützlich, um Typen von Drittanbietern zu erweitern. Typ-Aliase unterstützen dies nicht.

interface Window {
  myPlugin: { version: string };
}
// Now window.myPlugin is typed everywhere

Verschachtelte Objekttypen

Interface-Eigenschaften können selbst Objekttypen haben – entweder direkt innerhalb der Definition oder über einen Verweis auf ein anderes Interface.

interface Order {
  id: string;
  customer: {
    name: string;
    email: string;
  };
  items: Array<{
    productId: string;
    quantity: number;
    price: number;
  }>;
  total: number;
}

Strukturelle Typisierung – Duck-Typing

TypeScript verwendet strukturelle Typisierung: Ein Wert erfüllt einen Typ, wenn er mindestens die erforderlichen Eigenschaften besitzt. Eine explizite Implementierung ist nicht nötig. Jedes Objekt mit der passenden Struktur ist kompatibel.

interface Named {
  name: string;
}

function greet(obj: Named) {
  console.log(`Hello, ${obj.name}!`);
}

// No 'implements Named' needed:
greet({ name: 'Alice', age: 30 }); // OK — has the name property

Diskriminierte Unions mit Interfaces

Fügen Sie eine Eigenschaft mit einem Literaltyp als Diskriminator hinzu, um Varianten in einer Union zu unterscheiden. TypeScript grenzt den Typ in switch- oder if-Anweisungen anhand des Diskriminators ein.

interface Circle { kind: 'circle'; radius: number; }
interface Square { kind: 'square'; side: number; }
type Shape = Circle | Square;

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'square': return shape.side ** 2;
  }
}

Kurzüberprüfung

Was ist der wichtigste Unterschied zwischen interface und type in TypeScript?

Zusammenfassung: Interfaces

interface beschreibt Objektstrukturen mit erforderlichen, optionalen und schreibgeschützten Eigenschaften. Erweitern Sie Interfaces mit extends. Indexsignaturen sind für dynamische Schlüssel vorgesehen. Klassen implementieren Interfaces. Declaration Merging gibt es nur bei Interfaces. TypeScript verwendet strukturelle Typisierung – entscheidend ist die Struktur, nicht die explizite Deklaration.

Häufig gestellte Fragen

Ist die Lektion „Interfaces und Objekttypen“ kostenlos?

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

Was lerne ich in „Interfaces und Objekttypen“?

Beschreiben Sie Objektstrukturen mit interface und type, erweitern Sie Interfaces, verwenden Sie optionale Eigenschaften mit ? und readonly für Unveränderlichkeit. Du übst Frontend 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 Frontend Academy zu starten?

Keine Vorkenntnisse erforderlich. Frontend 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 3 von 4.

Wie lange dauert die Lektion „Interfaces und Objekttypen“?

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 Frontend Academy-Lektion Code schreiben und ausführen?

Ja. Jede Frontend 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. Warum TypeScript: Typen erkennen Fehler zur Compile-Zeit
  2. Primitive Typen, Unions und Type Aliases
  3. Interfaces und Objekttypen
  4. TS kompilieren und tsconfig.json
← Zurück zu Frontend Academy