Quando eu permitir que noImplicitThis
em tsconfig.json
, eu recebo este erro para o seguinte código:
'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`
});
Adicionar um digitado this
aos parâmetros de retorno de chamada resulta no mesmo erro:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Uma solução alternativa é substituir this
pelo objeto:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Mas qual é a correção adequada para esse erro?
ATUALIZAÇÃO: Acontece que adicionar um digitado this
ao retorno de chamada realmente resolve o erro. Eu estava vendo o erro porque estava usando uma função de seta com uma anotação de tipo para this
:
this
.