[英]How can I create an object in TypeScript with a constrained generic value type?
[英]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()
的類型簽名
如果有一個很好的方法,請給我一個答案。
在此示例中, 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.