Wenn ich ermöglichen noImplicitThis
in tsconfig.json
, bekomme ich diesen Fehler für den folgenden 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`
});
Das Hinzufügen einer Eingabe this
zu den Rückrufparametern führt zu demselben Fehler:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Eine Problemumgehung besteht darin, sie this
durch das Objekt zu ersetzen :
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Aber was ist die richtige Lösung für diesen Fehler?
UPDATE: Es stellt sich heraus, dass das Hinzufügen eines Typs this
zum Rückruf tatsächlich den Fehler behebt. Ich habe den Fehler gesehen, weil ich eine Pfeilfunktion mit einer Typanmerkung für Folgendes verwendet habe this
:
this
.