W TypeScript typ this można jawnie określać w sygnaturach funkcji. Służy to metodom obiektów i klas, aby zapewnić poprawne typowanie kontekstu wywołania.
Przykład określenia typu this:
interface Person { name: string; greet(this: Person): void; } const person: Person = { name: 'Max', greet() { console.log(`Cześć, ${this.name}!`); } };
Dla funkcji można jawnie określić typ this — jest on pierwszym nie nazwanym parametrem:
function showName(this: { name: string }) { console.log(this.name); }
Cechy funkcji strzałkowych:
Po co to potrzebne? Pozwala na wychwytywanie błędów przy niewłaściwym używaniu metod obiektów, pomaga w aktualnym “bindowaniu” podczas działania (np. w obsłudze zdarzeń).
Czy można jawnie określić typ this w funkcji strzałkowej? Gdzie jest haczyk?
Odpowiedź: Nie można. Funkcja strzałkowa przejmuje this z zewnętrznego kontekstu, a specyfikacja ECMAScript nie przewiduje własnej wartości this wewnątrz niej.
const foo = (this: any) => {} // Błąd kompilacji
Jeśli chcesz kontrolować this — użyj zwykłych (function) funkcji.
Historia
Historia
setTimeout(obj.method, 1000)) this było tracone, występował błąd wykonywania. Zapomniano o zablokowaniu kontekstu przez bind lub funkcję strzałkową.Historia
W bibliotece do pracy z modelami danych zapomniano określić typ this dla metod interfejsu. TypeScript nie wyświetlał błędu przy błędnym wywołaniu metody z niewłaściwym kontekstem, ale na produkcji aplikacja padała przy odwołaniu się do nieistniejących właściwości.