When I enable noImplicitThis
in tsconfig.json
, I get this error for the following code:
'this' implicitly has type 'any' because it does not have a type annotation.
class Foo implements EventEmitter {
on(name: string, fn: Function) { }
emit(name: string) { }
}
const foo = new Foo();
foo.on('error', function(err: any) {
console.log(err);
this.emit('end'); // error: `this` implicitly has type `any`
});
Adding a typed this
to the callback parameters results in the same error:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
A workaround is to replace this
with the object:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
But what is the proper fix for this error?
UPDATE: It turns out adding a typed this
to the callback indeed addresses the error. I was seeing the error because I was using an arrow function with a type annotation for this
:
this
. – Urbanize