typescript - description - meta angular 4
''this'' implícitamente tiene el tipo ''any'' porque no tiene una anotación de tipo (1)
Cuando
noImplicitThis
en
tsconfig.json
,
tsconfig.json
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 tipeado
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 tipeado
this
a la devolución de llamada de hecho aborda el error.
Estaba viendo el error porque estaba usando una función de flecha con una anotación de tipo para
this
:
El error se soluciona insertando
this
con una anotación de tipo como el primer parámetro de devolución de llamada.
Mi intento de hacerlo fue fallido al cambiar simultáneamente la devolución de llamada a una función de flecha:
foo.on(''error'', (this: Foo, err: any) => { // DON''T DO THIS
Debería haber sido esto:
foo.on(''error'', function(this: Foo, err: any) {
o esto:
foo.on(''error'', function(this: typeof foo, err: any) {
Se creó un
github.com/Microsoft/TypeScript/issues/13768
GitHub para mejorar el mensaje de error del compilador y resaltar el error de gramática real con
this
y las funciones de flecha.