【问题标题】:How to call a generic method with a deconstruct array as it's parameter如何使用解构数组作为参数调用泛型方法
【发布时间】:2021-10-23 23:00:35
【问题描述】:

我需要调用一个以解构数组为参数的泛型方法

据我所知,在今天,唯一的方法是使用已解构的数组并强制其类型为安全类型、继承参数 然后调用父方法,使用apply原型

例如:

这个 GET 承诺请求

public async getAsync<T>(url: string, options: HttpOptions<'GET'>): Promise<T> {
    try {
      const response = await this.http.get(url, options.params, options.headers);
      return response.data;
    } catch (e) {
      throw new Error(e);

    }
  }

假设我需要相同的方法,但作为可观察的

在我的实际情况中,有多种具有特定参数的方法,将其设置为静态参数类型会很混乱,因为它会随着项目需求的变化而变化。 所以我需要使用参数数组,如果您对此声明有更好的解决方案,请随时发送

认为会这样:

public getObservable<T>(...params: Parameters<HttpService['getAsync']>): Observable<T> {
    const request = this.getAsync<T>.apply(this,params);
    return from(request);
}

但事实并非如此:

所以我想知道,是否有办法使用 .apply 调用泛型方法?

【问题讨论】:

  • 请考虑修改此问题中的代码以构成minimal reproducible example,将其放入像The TypeScript Playground (link, this a web IDE with your code in it) 这样的独立IDE 时,清楚地表明您面临的问题(因此没有不相关的错误,例如作为未导入或未声明的值或类型)。这将使那些想要帮助您的人立即着手解决问题,而无需首先重新创建它。它将使您得到的任何答案都可以针对定义明确的用例进行测试。

标签: typescript generics overriding typescript-generics


【解决方案1】:

也许可以试试bind 方法:

    public getObservable<T>(...params: Parameters<HttpService['getAsync']>): Observable<T> {
        const request = this.getAsync.bind(this);
        return from(request<T>(...params));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2018-06-22
    • 2016-02-06
    相关资源
    最近更新 更多