You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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的映射类型特性:

  1. [Property in keyof T]遍历输入类型T的所有属性名;
  2. Wrapper<T[Property]>将每个属性的原始类型传入指定的包裹泛型,生成新的属性类型;
  3. 通过别名ObjectToObservables可以简化针对特定包裹类型的调用。

内容的提问来源于stack exchange,提问作者Tovar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:33:15