我有一个类型声明
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
库。
任何建议如何实现?