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):
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:
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
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.
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
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.
Hinweis anzeigen
Verwende declare global { interface Window { config: Record<string, string>; } }.
Lösung nach 3 Versuchen verfügbar