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

使用graphql-codegen生成操作类型时如何避免包含全部接口实现类?

解决方案

你可以通过调整graphql-codegen的typescript-operations插件配置解决这个问题,具体可行方案如下:

方案1:开启omitImplementingTypesWithoutFields配置

这是官方针对这类场景提供的专属配置,开启后生成操作类型时,会自动过滤掉查询中未请求任何字段的接口实现类型,仅保留你显式声明了字段请求的类型。
你只需要在codegen配置文件(通常为codegen.yml或.graphqlrc.yml)中添加对应配置即可:

generates:
  ./src/gql/types.ts:
    plugins:
      - typescript
      - typescript-operations
    config:
      omitImplementingTypesWithoutFields: true

注意:该配置要求@graphql-codegen/typescript-operations依赖版本不低于2.5.0,版本过低时先升级依赖到最新稳定版即可生效。

配置生效后重新生成类型,你示例中的MyDataQuery的datasource字段就只会保留TypeA的类型定义,不会再出现未使用的TypeB、TypeC空类型。

方案2:搭配配置进一步优化体积

如果你的场景涉及多层嵌套的接口查询,可以额外添加inlineFragmentTypes: 'combine'配置,该配置会将内联片段的类型直接合并到父字段类型中,避免生成多余的中间联合类型,进一步缩减生成文件的体积:

config:
  omitImplementingTypesWithoutFields: true
  inlineFragmentTypes: 'combine'

额外优化建议

如果你的项目不需要使用全量Schema类型,仅需要和操作相关的类型,可以给typescript基础插件开启onlyOperationTypes: true配置,会自动过滤掉未被任何查询/突变/订阅使用的Schema类型,进一步减小生成文件体积:

plugins:
  - typescript
  - typescript-operations
config:
  onlyOperationTypes: true
  omitImplementingTypesWithoutFields: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:06