patterntypescriptCritical
'this' implicitly has type 'any' because it does not have a type annotation
Viewed 0 times
hasanyhaveannotationimplicitlybecausedoesnotthistype
Problem
When I enable
'this' implicitly has type 'any' because it does not have a type
annotation.
Adding a typed
A workaround is to replace
But what is the proper fix for this error?
UPDATE: It turns out adding a typed
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:Solution
The error is indeed fixed by inserting
It should've been this:
or this:
A GitHub issue was created to improve the compiler's error message and highlight the actual grammar error with
this with a type annotation as the first callback parameter. My attempt to do that was botched by simultaneously changing the callback into an arrow-function:foo.on('error', (this: Foo, err: any) => { // DON'T DO THISIt should've been this:
foo.on('error', function(this: Foo, err: any) {or this:
foo.on('error', function(this: typeof foo, err: any) {A GitHub issue was created to improve the compiler's error message and highlight the actual grammar error with
this and arrow-functions.Code Snippets
foo.on('error', (this: Foo, err: any) => { // DON'T DO THISfoo.on('error', function(this: Foo, err: any) {foo.on('error', function(this: typeof foo, err: any) {Context
Stack Overflow Q#41944650, score: 293
Revisions (0)
No revisions yet.