【问题标题】:How can I send a method with it's generic type to RXJS bindCallback?如何将具有泛型类型的方法发送到 RXJS bindCallback?
【发布时间】:2023-03-22 23:07:01
【问题描述】:

我需要将一个带有回调的函数传递给bindCallback rxjs 函数。但我的函数有泛型。

这是代码:

const obCreator = bindCallback<T>(FakeServer.instance.on<T>);
return obCreator(module, method);

这是第一行的错误:

没有重载匹配这个调用。重载 1 of 34, '(callbackFunc: (回调: (res1: T) => any) => any, scheduler?: SchedulerLike | undefined): () => Observable',给出了以下错误。 'void' 类型的参数不能分配给 '(callback: (res1: T) => any) => any' 类型的参数。

这没有错误但没有泛型:

const obCreator = bindCallback(FakeServer.instance.on);
return obCreator(module, method);

【问题讨论】:

  • 查看错误,看起来您的回调没有返回任何内容,这意味着 return void 尝试更改一些值,例如返回布尔值或字符串或数组...但不是 void...

标签: javascript typescript callback rxjs


【解决方案1】:

根据documentationbindCallback的第一个签名是

bindCallback<T>(callbackFunc: Function, resultSelector?: Function | SchedulerLike, scheduler?: SchedulerLike): (...args: any[]) => Observable<T>

这意味着您可以将泛型类型传递给bindCallback,但作为输入传递的函数没有任何泛型。因此,您应该能够使用以下表格

const obCreator = bindCallback<T>(FakeServer.instance.on);
return obCreator(module, method);  // returns an Observable<T>

没有其他接受泛型的重载,所以这似乎是唯一的选择,可能没有 根据这个stackblitz,这应该可以工作。

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多