1. ホーム
  2. javascript

[解決済み] エラー 型に呼び出し署名がない式は呼び出せない

2022-06-08 02:28:35

質問

私はtypescriptの初心者で、2つのクラスを持っています。親クラスに私は持っています。

abstract class Component {
  public deps: any = {};
  public props: any = {};

  public setProp(prop: string): any {
    return <T>(val: T): T => {
      this.props[prop] = val;
      return val;
    };
  }
}

子クラスの中に

class Post extends Component {
  public toggleBody: string;

  constructor() {
    this.toggleBody = this.setProp('showFullBody');
  }

  public showMore(): boolean {
    return this.toggleBody(true);
  }

  public showLess(): boolean {
    return this.toggleBody(false);
  }
}

showMoreとShowLessの両方で、"Cannot invoke an expression whose type lacks a call signature."というエラーが発生します。

しかし、setProp が返す関数は呼び出し署名を持っていると思うのですが?関数の型付けについて何か重要なことを誤解しているような気がしますが、それが何なのかわかりません。

ありがとうございます。

どのように解決するのですか?

この関数が返す関数には呼び出し署名がありますが、それを完全に無視するように、Typescript に : any を追加することで、Typescript にそれを完全に無視させました。