tsconfig.json
でnoImplicitThis
を有効にすると、次のコードでこのエラーが発生します。
'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`
});
型指定されたthis
をコールバックパラメータに追加すると、同じエラーが発生します。
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
回避策は、this
をオブジェクトに置き換えることです。
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
しかし、このエラーに対する適切な修正は何ですか?
UPDATE:コールバックに型付きのthis
を追加すると、エラーに対処できます。 this
の型注釈付きの矢印関数を使用していたため、エラーが発生しました。
最初のコールバックパラメータとして型注釈付きのthis
を挿入することで、このエラーは確かに修正されます。それを試みる私の試みは、コールバックを同時に矢印関数に変更することによって妨げられました。
foo.on('error', (this: Foo, err: any) => { // DON'T DO THIS
それはこれだったはずです:
foo.on('error', function(this: Foo, err: any) {
またはこれ:
foo.on('error', function(this: typeof foo, err: any) {
GitHub issue はコンパイラのエラーメッセージを改善し、this
とarrow-functionsで実際の文法エラーを強調するために作成されました。