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
相关产品推荐
相关产品推荐

