打字稿:将通用类型class应用于列表中的所有类型

Typescript: Applying generic type class to all types in list

如何从类型列表创建 [T1, T2, T3, ...] 例如 [Array<T1>, Array<T2>, Array<T3>, ...] 的列表?

用例:我想定义一个具有以下结构的泛型类型class:

class BaseService<T> {
  abstract getObservable(): Observable<HttpResponse<T>>;
  abstract func(responses: T): void;
  
  getData() {
    this.getObservable().subscribe(
      (http_response) => this.func(http_response.body)
    );
  }
}

其中 getObservable()func(...) 定义在 class 扩展中。问题是我有不同数量的可观察量、T1、T2 等。我尝试使用 base = new BaseService<[T1, T2]>() 但是 getObservable() 函数应该 return 类型 Observable<[HttpResponse<T1>, HttpResponse<T2>]> 而不是 Observable<HttpResponse<[T1, T2]>>(因此是最初的问题)。我还尝试通过将 class 重新定义为

来使用 base = new BaseService<T1, T2>()
class BaseService<T1, T2> {
  abstract getObservable(): Observable<[HttpResponse<T1>, HttpResponse<T2>]>;
  abstract func(responses: [T1, T2]): void;
  
  getData() {
    this.getObservable().subscribe(
      (http_response) => this.func(http_response.body)
    );
  }
}

并且可能超载以考虑不同数量的观察者。但是后来我 运行 在 (http_response) => this.func(http_response.body) 行遇到了问题,或者我尝试了 (http_response) => this.func(http_response.map((res) => res.body)).

不成功的解决方法

使用映射的元组类型:

type ToObservable<T> = {
  [K in keyof T]: Observable<T[K]>;
};

type MyObservables = ToObservable<[string, number]>; // [Observable<string>, Observable<number>]