In TypeScript kann der Typ this in Funktionssignaturen explizit angegeben werden. Dies wird für Methoden von Objekten und Klassen verwendet, um die korrekte Typisierung des Kontextes des Aufrufs zu gewährleisten.
Beispiel für die Angabe des Typs this:
interface Person { name: string; greet(this: Person): void; } const person: Person = { name: 'Max', greet() { console.log(`Hallo, ${this.name}!`); } };
Für Funktionen kann der Typ this explizit angegeben werden – er wird als erster unbenannter Parameter übergeben:
function showName(this: { name: string }) { console.log(this.name); }
Besonderheiten von Pfeilfunktionen:
Warum ist das nötig? Ermöglicht das Erkennen von Fehlern bei falscher Verwendung von Methoden in Objekten, hilft bei der aktuellen Laufzeit-"Bindung" (zum Beispiel in Event-Handlern).
Kann man den Typ this bei einer Pfeilfunktion explizit angeben? Wo ist der Haken?
Antwort: Nein. Die Pfeilfunktion erfasst this aus dem äußeren Kontext, und die ECMAScript-Spezifikation sieht keinen eigenen Wert für this innerhalb von ihr vor.
const foo = (this: any) => {} // Kompilierungsfehler
Wenn Sie this kontrollieren müssen – verwenden Sie normale (function) Funktionen.
Geschichte
Geschichte
setTimeout(obj.method, 1000)) ging this verloren, was zu einem Laufzeitfehler führte. Man hatte vergessen, den Kontext über bind oder eine Pfeilfunktion zu fixieren.Geschichte
In einer Bibliothek zur Arbeit mit Datenmodellen wurde vergessen, den Typ this für die Methoden des Interfaces anzugeben. TypeScript zeigte keinen Fehler bei der falschen Aufruf des Methodes mit einem ungeeigneten Kontext, dafür fiel die Anwendung in der Produktion ab, als auf nicht existierende Eigenschaften zugegriffen wurde.