Lorsque j'active noImplicitThis
sur tsconfig.json
J'obtiens cette erreur pour le code suivant :
'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`
});
L'ajout d'une this
aux paramètres de la fonction de rappel entraîne la même erreur :
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Une solution de contournement consiste à remplacer this
avec l'objet :
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Mais quelle est la bonne solution pour corriger cette erreur ?
UPDATE : Il s'avère que l'ajout d'un this
à la fonction de rappel répond en effet à l'erreur. Je voyais l'erreur parce que j'utilisais une fonction flèche avec une annotation de type de this
:
0 votes
Avez-vous essayé cela sur TypeScript 2.1 ou la version nightly ?
0 votes
@DanielRosenwasser 2.1.4
0 votes
Et je vois maintenant la raison pour laquelle WebStorm et TS playground se plaignaient : J'utilisais une fonction flèche alors que je fournissais une annotation de type pour
this
.2 votes
J'ai déposé un bug ici : github.com/Microsoft/TypeScript/issues/13768 - n'hésitez pas à le suivre et à donner un coup de pouce.