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

TypeScript中如何动态用泛型包装接口的每个属性?

解决方案:用TypeScript映射类型实现属性逐个包装

你可以通过TypeScript的映射类型来解决这个问题,它会遍历原始接口的每个属性,单独用GenericInterface进行包装,避免类型合并成联合类型。

步骤1:定义映射类型

先写一个通用的映射类型,用来把任意接口的每个属性都用GenericInterface包装:

type WrapWithGeneric<T> = {
  [K in keyof T]: GenericInterface<T[K]>;
};

这里的[K in keyof T]会遍历T的所有属性键,T[K]取对应属性的原始类型,再传入GenericInterface作为泛型参数,确保每个属性保留自己的专属类型,不会被合并。

步骤2:生成目标类型

用这个映射类型处理Original接口,直接得到你想要的Modified类型:

type Modified = WrapWithGeneric<Original>;

验证效果

此时Modified的结构完全符合预期:

  • a的类型是GenericInterface<string>
  • b的类型是GenericInterface<number>
  • c的类型是GenericInterface<boolean>

不会出现所有属性都变成GenericInterface<string | number | boolean>的问题。

内容的提问来源于stack exchange,提问作者Prof.Chewbacca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:08:09