我正在尝试创建一个函数,将 rxjs.Observable
的对象合并为单个 Observable
。
例如,
假设我有一个可观察到的 map ,如下所示。
const fooObservable$: Observable<Foo> = createFooObservable();
const barObservable$: Observable<Bar> = createBarObservable();
// Type of observables would be
// { foo: Observable<Foo>, bar: Observable<Bar> }
// And, `keyof typeof observables` would be
// "foo" | "bar"
const observables = {
foo: fooObservable$,
bar: barObservable$,
};
那么我怎样才能创建一个合并可观察量的函数,如下所示?
// typeof merged$ would be
// Observable<{ foo: Foo, bar: Bar }>
const merged$ = merge(observables);
我不知道如何定义函数merge()
的类型签名
如果有好的方法,请给我答案。
最佳答案
在此示例中,M
是 Observable
(但它实际上可以应用于任何泛型类型):
class M<A> {
value: A;
}
type Unpacked<T> = T extends M<infer U> ? U : never;
type MergeBody<T> = {
[P in keyof T]: Unpacked<T[P]>
}
function merge<T>(t: T): M<MergeBody<T>> {
...
}
然后是一个例子:
let o = {
a: new M<number>(),
b: new M<string>()
}
const m = merge(o)
// type checks!
let n: number = m.value.a
关于typescript - 在 Typescript 中,如何将通用容器类型的对象合并到对象类型的通用容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54121459/