簡體   English   中英

在Typescript中,如何將通用容器類型的對象合並到對象類型的通用容器中?

[英]In Typescript, How can I merge object of generic container types into generic container of object type?

我正在嘗試制作一個將rxjs.Observable的對象合並為單個Observable的函數。

例如,

假設我有一個如下所示的可觀察對象圖。

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()的類型簽名

如果有一個很好的方法,請給我一個答案。

在此示例中, MObservable (但實際上可以應用於任何泛型類型):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM