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.





typescript2.0