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

如何移除TypeScript Interface属性中包裹类型的泛型得到原始类型

解决方案

你可以通过TypeScript的条件类型+infer推断+映射类型实现自动解包,不需要手动改写每个属性:

第一步:定义解包工具类型

// 泛型判断:如果输入类型是ResultModifier包裹的,返回内部的泛型参数,否则原样返回
type UnwrapResultModifier<T> = T extends ResultModifier<infer InnerType> ? InnerType : T;

第二步:遍历原接口生成目标类型

type ServerMessagesWithoutGenerics = {
  [Key in keyof ServerMessages]: UnwrapResultModifier<ServerMessages[Key]>
};

效果验证

生成的ServerMessagesWithoutGenerics和你预期的接口结构完全一致,你可以通过以下方式测试:

// 测试EVENT_3的类型,会被正确推断为ResponseEventBody3,而非ResultModifier<ResponseEventBody3>
type TestEvent3Type = ServerMessagesWithoutGenerics[ActionType.EVENT_3];

这种方案的优势是后续你修改ServerMessages的属性时,转换后的类型会自动同步,无需手动维护两份接口定义。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:04