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

Typescript如何合并两种复杂泛型类型实现通用配置对象类型定义

统一类型定义

你可以通过映射类型重映射结合交叉类型合并两种结构,既能严格区分单字段配置和分组配置的类型,又能避免索引签名冲突问题,最终实现如下:

export interface RuleDetailFieldConfig {
  provider: string;
  validators: string[];
}

// 合并后的通用配置类型
export type RuleDetailsUnifiedConfig<Type> = 
  // 泛型关联键仅支持单字段配置
  { [Property in keyof Type]: RuleDetailFieldConfig } 
  // 非泛型自定义键仅支持分组配置
  & { [GroupName in string as GroupName extends keyof Type ? never : GroupName]: Array<Partial<{
    [Property in keyof Type]: RuleDetailFieldConfig
  }>> }
验证示例

代入你给出的Test接口测试,完全匹配myConfig的结构,可正常通过类型校验:

interface Test  {
  keyA: any;
  keyB: any;
  keyC: any;
  keyD: any
}

const myConfig: RuleDetailsUnifiedConfig<Test> = {
  'keyA': { provider: 'Country', validators: [] }, 
  'myGroup': [
    {
      'keyB': { provider: 'Country', validators: [] },
      'keyC': { provider: 'Country', validators: [] },
      'keyD': { provider: 'Country', validators: [] },
    }
  ]
};
类型约束说明
  • 属于泛型Type的键(示例中为keyA)只能赋值RuleDetailFieldConfig类型的单字段配置,赋值其他类型会抛出类型错误
  • 不属于泛型Type的自定义分组名(示例中为myGroup)只能赋值「泛型部分键对应字段配置的对象数组」,完全匹配你的分组需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:24:07