'Dies' hat implizit den Typ 'any', weil es keine Typannotation hat
Wenn ich Sie aktivieren noImplicitThis
im tsconfig.json
bekomme ich diese 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`
});
Hinzufügen eines typisierten this
den callback-Parametern ergibt sich der gleiche Fehler:
foo.on('error', (this: Foo, err: any) => { //error: `this` implicitly has type `any`
Ist ein workaround zu ersetzen this
mit dem Objekt:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Aber was ist die richtige fix für diesen Fehler?
UPDATE: Es stellt sich heraus, das hinzufügen einer typisierten this
an die callback-in der Tat behebt die Fehler. Ich sah die Fehler, da war ich mit einem Pfeil-Funktion mit einem Typ-annotation für this
:
InformationsquelleAutor der Frage tony19 | 2017-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Fehler ist tatsächlich behoben, durch einfügen von
this
mit einem Typ-annotation als ersten parameter callback. Mein Versuch, das zu tun, war verkorksten durch die gleichzeitige änderung der Rückruf in einem Pfeil-Funktion:Sollte habe:
oder so:
Einen GitHub - Problem wurde geschaffen, um zu verbessern die compiler-Fehlermeldung aus, und markieren Sie den eigentlichen Grammatik-Fehler mit
this
- und Pfeil-Funktionen.InformationsquelleAutor der Antwort tony19