typescript - type - 'this' hat implizit den Typ 'any', da keine Typanmerkung vorhanden ist
typescript type annotations (1)
Wenn ich
noImplicitThis
in
tsconfig.json
, wird dieser Fehler für den folgenden Code
tsconfig.json
:
'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 eines getippten
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,
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 getippten
this
zum Callback tatsächlich den Fehler behebt.
Der Fehler wurde angezeigt, weil ich eine Pfeilfunktion mit einer Typanmerkung für
this
:
Der Fehler wird in der Tat behoben, indem
this
mit einer Typanmerkung als erstem Rückrufparameter eingefügt wird.
Mein Versuch, dies zu tun, wurde durch gleichzeitiges Ändern des Rückrufs in eine Pfeilfunktion verpfuscht:
foo.on('error', (this: Foo, err: any) => { // DON'T DO THIS
Das hätte sein sollen:
foo.on('error', function(this: Foo, err: any) {
oder dieses:
foo.on('error', function(this: typeof foo, err: any) {
Ein GitHub-
github.com/Microsoft/TypeScript/issues/13768
wurde erstellt, um die Fehlermeldung des Compilers zu verbessern und den tatsächlichen Grammatikfehler mit
this
und den Pfeilfunktionen hervorzuheben.