打字稿:将通用类型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>]
如何从类型列表创建 [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>]