【问题标题】:Type 'void' is not assignable to type '((err: any) => void)类型 'void' 不能分配给类型 '((err: any) => void)
【发布时间】:2019-03-27 22:10:47
【问题描述】:

我在打字稿中有如下界面

interface ConfigOptions {
    autoloadCallback: (err: any) => void;
}

在我的实现中,我有

options = {
  autoloadCallback: this.autoLoadCallBack(err)
}

public autoLoadCallBack(err: any) : void {
  console.log('im a callback');
};

引发以下错误

属性“autoloadCallback”的类型不兼容。 类型 'void' 不能分配给类型 '((err: any) => void) |未定义'。

因为 autoLoadCallBack 接受任何类型并且不返回任何内容,如果它符合接口规范?

【问题讨论】:

  • options.autoloadCallback 应该是一个函数,对吧?但是您已将其设置为函数的void 返回值。错误告诉你。为什么不options = {autoloadCallback: this.autoLoadCallback.bind(this)} 之类的?

标签: typescript


【解决方案1】:

您正在调用this.autoLoadCallBack,然后将该函数的返回值(在这种情况下什么都不是,因为它是无效的)分配给options.autoloadCallback

您似乎试图将this.autoLoadCallBack 函数直接分配给options.autoloadCallback,如下所示:

options = {
  autoloadCallback: this.autoLoadCallBack
}

public autoLoadCallBack(err: any) : void {
  console.log('im a callback');
};

【讨论】:

  • 那么为什么给 this.autoLoadCallBack 添加参数会导致这个失败呢?
  • @user618509:this.autoLoadCallBack(err)调用函数,this.autoLoadCallBack函数。如果您想要一个更实际的示例,请检查在浏览器控制台中运行 console.logconsole.log("hello, world") 之间的区别。
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 2020-10-01
  • 2020-03-02
  • 2019-07-14
  • 2021-02-06
  • 2023-01-12
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多