Kiedy włączyć noImplicitThis
w tsconfig.json
, otrzymuję ten błąd za pomocą następującego kodu:
'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`
});
Dodanie wpisanego this
do parametrów wywołania zwrotnego powoduje ten sam błąd:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Sposób obejścia problemu polega na zastąpieniu this
obiektu:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Ale jakie jest właściwe rozwiązanie tego błędu?
AKTUALIZACJA: Okazuje się, że dodanie wpisanego tekstu this
do wywołania zwrotnego rzeczywiście rozwiązuje błąd. Widziałem błąd, ponieważ używałem funkcji strzałkowej z adnotacją typu dla this
:
typescript
typescript2.0
tony19
źródło
źródło
this
.Odpowiedzi:
Błąd jest rzeczywiście naprawiony poprzez wstawienie
this
z adnotacją typu jako pierwszym parametrem wywołania zwrotnego. Moja próba zrobienia tego zakończyła się niepowodzeniem, zmieniając jednocześnie wywołanie zwrotne w funkcję strzałki:Powinno być tak:
albo to:
GitHub problem został stworzony w celu poprawy komunikat o błędzie kompilatora i podkreślają rzeczywisty błąd z gramatyki
this
i Arrow-funkcje.źródło
this
będzie to typ inicjowanej klasy. Na przykład, jeśliconstructor
jest dla klasyMyClass
, adnotacja typu dlathis
będzieMyClass
.