如何在TypeScript中实现将对象字段转为Observable的泛型类型?
TypeScript实现通用属性类型转换泛型
完全可以实现,这是TypeScript映射类型的典型应用场景,不仅能适配Observable,还能支持任意类似的泛型包裹类型。
实现代码示例
// 假设已定义 Observable 接口(如 RxJS 中的 Observable) interface Observable<T> { subscribe(callback: (value: T) => void): void; } // 原业务接口 interface MyInterface { a: string; b: number; } // 通用泛型类型:将对象的每个属性类型用指定泛型包裹 type ObjectToWrapped<T, Wrapper> = { [Property in keyof T]: Wrapper<T[Property]>; }; // 针对 Observable 的快捷别名(符合你的命名需求) type ObjectToObservables<T> = ObjectToWrapped<T, Observable>; // 使用示例:自动生成目标类型 type Result = ObjectToObservables<MyInterface>; // Result 等价于: // { // a: Observable<string>; // b: Observable<number>; // }
适配其他包裹类型
这个泛型是通用的,比如要适配Promise,只需定义对应的别名:
type ObjectToPromises<T> = ObjectToWrapped<T, Promise>; // 使用示例 type PromiseResult = ObjectToPromises<MyInterface>; // PromiseResult 等价于: // { // a: Promise<string>; // b: Promise<number>; // }
原理说明
这里用到了TypeScript的映射类型特性:
[Property in keyof T]遍历输入类型T的所有属性名;Wrapper<T[Property]>将每个属性的原始类型传入指定的包裹泛型,生成新的属性类型;- 通过别名
ObjectToObservables可以简化针对特定包裹类型的调用。
内容的提问来源于stack exchange,提问作者Tovar
相关产品推荐
相关产品推荐

