错误:无法调用类型缺少调用签名的表达式

新手上路,请多包涵

我是打字稿的新手,我有两门课。在父类中,我有:

 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 都给我错误,“无法调用类型缺少调用签名的表达式。”

但是我认为 setProp 返回的函数确实有调用签名?我想我误解了关于函数类型的重要内容,但我不知道它是什么。

谢谢!

原文由 Justin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

它返回的函数有一个调用签名,但是你告诉 Typescript 通过在其签名中添加 : any 来完全忽略它。

原文由 SLaks 发布,翻译遵循 CC BY-SA 4.0 许可协议

当您从某物请求一个值并将括号放在末尾时,可能会导致此错误,就好像它是一个函数调用一样,但该值在没有结束括号的情况下被正确检索。例如,如果您正在访问的是 Typescript 中的“获取”属性。

 private IMadeAMistakeHere(): void {
    let mynumber = this.SuperCoolNumber();
}

private IDidItCorrectly(): void {
    let mynumber = this.SuperCoolNumber;
}

private get SuperCoolNumber(): number {
    let response = 42;
    return response;
};

原文由 StackOverflowUser 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题