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和返回结构里继续保留原来的
Addresstype即可:
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
相关产品推荐
相关产品推荐

