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

GraphQL提示Address类型重复但无重复的问题解决

解决GraphQL Schema重复类型报错:"Schema must contain unique named types but contains multiple types named 'Address'"

我刚花了一整晚跟这个报错死磕,太懂这种明明看着没问题却一直报错的崩溃感了!当时我的场景是:把多个.graphql文件合并后传入makeExecutableSchema,结果反复弹出这个重复类型错误,但我把合并后的schema打印出来翻来覆去看,压根没找到重复定义的Address类型。

折腾到最后终于揪出了问题根源:我在Mutation的输入参数里直接复用了Query里的Address类型!

GraphQL里的type和input是完全独立的两类定义——type是用来描述查询返回的输出结构,而input才是专门为Mutation(或其他需要传入结构化数据的场景)设计的输入参数类型。哪怕两个结构的字段完全一致,混用它们也会被GraphQL判定为两个同名但不同类型的定义,直接触发重复类型报错。

解决方法其实很简单:

  • 专门为Mutation输入定义一个AddressInput类型,用input关键字声明:
input AddressInput {
  street: String!
  city: String!
  zipCode: String
}
  • 在Mutation里引用这个AddressInput作为参数类型,替换原来的Address:
type Mutation {
  createUser(name: String!, address: AddressInput!): User
}
  • Query和返回结构里继续保留原来的Address type即可:
type Address {
  street: String!
  city: String!
  zipCode: String
}

type Query {
  getUser(id: ID!): User
}

type User {
  id: ID!
  name: String!
  address: Address
}

改完之后重新运行,那个烦人的报错就彻底消失了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:51