1. ホーム
  2. typescript

[解決済み】 'this' は型アノテーションがないため、暗黙のうちに 'any' 型を持っている

2022-04-13 21:54:28

質問

を有効にすると noImplicitThistsconfig.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`
});

型付けされたものを追加する 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 をコールバックに追加することで、確かにエラーに対処できました。私がこのエラーを見たのは、arrow関数に型アノテーションを付けて this :

解決方法は?

を挿入することで、確かにエラーは直りました。 this を、最初のコールバック・パラメータとしてタイプ・アノテーションで指定します。私の試みは、同時にコールバックをarrow-functionに変更することで失敗してしまいました。

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 問題 が作成され、コンパイラのエラーメッセージを改善し、実際の文法エラーを強調するようになりました。 this やarrow-functionsがあります。