Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 2 von 214/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Deklarationen und Merging

Die Typdeklarationsdateien (mit der Endung .d.ts) werden in TypeScript verwendet, um die Struktur von vorhandenem JavaScript-Code zu beschreiben, ohne tatsächliche Logik zu implementieren. Sie enthalten nur Definitionen von Typen, Schnittstellen und Funktionssignaturen.

Diese Dateien sind unerlässlich, wenn wir Bibliotheken von Drittanbietern verwenden, die in reinem JavaScript geschrieben sind.


Declaration Merging (Zusammenführen von Deklarationen)

Declaration Merging ist ein Verhalten, bei dem der Compiler zwei oder mehr separate Definitionen mit demselben Namen zu einer einzigen Definition zusammenführt.

Der häufigste Fall ist das Zusammenführen von Schnittstellen (Interfaces):

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// Das resultierende Interface User besitzt sowohl name als auch age!
const student: User = {
  name: 'Alice',
  age: 23,
};

Wenn Eigenschaften denselben Namen haben, müssen sie vom selben Typ sein, andernfalls meldet TypeScript einen Fehler.


Globale und externe Module ändern

Wir können Declaration Merging verwenden, um Schnittstellen zu erweitern, die in anderen Modulen oder im globalen Gültigkeitsbereich definiert sind.

Wenn wir beispielsweise dem globalen window-Objekt des Browsers eine Eigenschaft hinzufügen möchten:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Mit declare global teilen wir TypeScript mit, dass wir eine neue Signatur in das bereits global vorhandene Window-Interface einfügen.


Probier es aus

Aufgabe 1: Einfaches Declaration Merging

Übung#ts.m7.l2.e1
Versuche: 0Wird geladen…

In TypeScript werden Schnittstellen mit demselben Namen im selben Gültigkeitsbereich automatisch zusammengeführt. Deklariere ein Interface User mit der Eigenschaft name: string, und deklariere in einem zweiten Block dasselbe Interface User erneut, füge jedoch die Eigenschaft age: number hinzu. Deklariere schließlich eine Konstante user vom Typ User mit entsprechenden Werten.

Editor wird geladen…
Hinweis anzeigen

Deklariere interface User zweimal mit den jeweiligen Eigenschaften und weise die Felder dann dem Objekt user zu.

Lösung nach 3 Versuchen verfügbar

Aufgabe 2: Erweiterung des globalen Window-Interfaces

Übung#ts.m7.l2.e2
Versuche: 0Wird geladen…

Stell dir vor, du möchtest das globale Window-Interface erweitern, um eine benutzerdefinierte Eigenschaft namens config vom Typ Record<string, string> hinzuzufügen. Schreibe die korrekte Deklaration mit declare global, um die neue Eigenschaft in das globale Window-Interface einzufügen.

Editor wird geladen…
Hinweis anzeigen

Verwende declare global { interface Window { config: Record<string, string>; } }.

Lösung nach 3 Versuchen verfügbar