如何将嵌套的通用参数传递给打字稿类型声明?

时间:2019-12-18 04:59:23

标签: typescript generics typescript-generics

我有一个类型声明

type IfExtendsThen<Tin, Tx, To1, To2> = Tin extends Tx ? To1 : To2;

type AllPropertiesAsObservable<T> = {
  [key in keyof T]: IfExtendsThen<T[key], string | number | boolean, Observable<T[key]>, AllPropertiesAsObservable<T[key]>>;
} & Observable<T>;

它创建一个映射类型,在该映射类型中,将字符串,数字或布尔类型的每个属性都递归转换为可观察的。

它工作正常,但现在我也想通过Observable类型作为输入... 即类似这样的

type AllPropertiesAsObservable<T, Tobservable extends Observable> = {
  [key in keyof T]: IfExtendsThen<T[key], string | number | boolean, Tobservable <T[key]>, AllPropertiesAsObservable<T[key], Tobservable >>;
} & Tobservable <T>;

所以,我可以像这样使用它

let obj = AllPropertiesAsObservable<Xyz, BehaviorSubject>;

现在,类型为Xyz的字符串,数字或布尔类型的所有属性都将转换为BehaviorSubject。 但是,这会导致错误,

Generic type 'Observable<T>' requires 1 type argument(s).

AllPropertiesAsObservable声明中。

注意:Observable来自rxjs库。

任何建议如何实现?

0 个答案:

没有答案