Cuando activo noImplicitThis
en tsconfig.json
, consigo este error para el siguiente 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`
});
Agregar un tipo this
a los parámetros de devolución de llamada da como resultado el mismo error:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Una solución alternativa es reemplazar this
con el objeto:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Pero, ¿cuál es la solución adecuada para este error?
ACTUALIZACIÓN: Resulta que agregar un escrito this
a la devolución de llamada soluciona el error. Veía el error porque estaba usando una función de flecha con una anotación de tipo para this
:
typescript
typescript2.0
tony19
fuente
fuente
this
.Respuestas:
De hecho, el error se corrige insertando
this
una anotación de tipo como primer parámetro de devolución de llamada. Mi intento de hacer eso fue un fracaso al cambiar simultáneamente la devolución de llamada en una función de flecha:Debería haber sido esto:
o esto:
Se creó un problema de GitHub para mejorar el mensaje de error del compilador y resaltar el error gramatical real con
this
y arrow-functions.fuente
this
sería el tipo de clase que se inicializa. Por ejemplo, siconstructor
es para la claseMyClass
, el tipo de anotación parathis
seríaMyClass
.