В TypeScript тип this можно явно указывать в сигнатуре функций. Это используется для методов объектов и классов, чтобы гарантировать верную типизацию контекста вызова.
Пример задания типа this:
interface Person { name: string; greet(this: Person): void; } const person: Person = { name: 'Max', greet() { console.log(`Hello, ${this.name}!`); } };
Для функций можно явно указать тип this — он идёт первым неименованным параметром:
function showName(this: { name: string }) { console.log(this.name); }
Особенности стрелочных функций:
Зачем это нужно? Позволяет ловить ошибки при неправильном использовании методов объектов, помогает актуально рантайм-"байндинге" (например, в event handlers).
Можно ли явно указать тип this у стрелочной функции? В чём подвох?
Ответ: Нельзя. Стрелочная функция захватывает this из внешнего контекста, и спецификация ECMAScript не предполагает собственного значения this внутри нее.
const foo = (this: any) => {} // Ошибка компиляции
Если нужно контролировать this — используйте обычные (function) функции.
История
История
setTimeout(obj.method, 1000)) this терялся, возникал runtime-ошибка. Забыли зафиксировать контекст через bind или стрелочную функцию.История
В библиотеке для работы с моделями данных забыли указать тип this для методов interface. TypeScript не показывал ошибку при ошибочном вызове метода с неподходящим контекстом, зато на production приложение падало при обращении к несуществующим свойствам.