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

Nestjs代码优先定义GraphQL ObjectType报Address类型重名怎么解决

问题原因

你遇到的报错是因为NestJS GraphQL代码优先模式下,所有带@ObjectType()装饰器的类默认会将类名作为GraphQL Schema中的类型名,你的项目中存在至少两个使用Address作为类型名的GraphQL对象类型定义,触发了Schema类型名唯一的校验规则。
就算不同文件中的Address类未对外导出,只要对应文件被项目加载执行,@ObjectType()装饰器就会自动将该类注册为GraphQL类型,也会导致冲突。

解决方案
  • 方案1:为当前文件的Address指定自定义类型名
    直接给@ObjectType()装饰器传入唯一的类型名称,即可避免和其他重名类型冲突,比如你的Address属于Reader模块,可改为:
@ObjectType('ReaderAddress')
class Address {
  @Field()
  homeAddress: string;
  @Field()
  province: string;
  @Field()
  postcode: string;
}
  • 方案2:复用公共类型定义
    全局搜索项目中所有带@ObjectType()装饰器的Address类,如果多个Address类的字段定义完全一致,可将其抽离为公共的全局类型,存放到单独的文件中统一导出,所有需要使用的模块都导入该公共类型,避免重复定义。
  • 方案3:排查重名定义分别命名
    如果多个Address类的字段定义、业务含义不同,分别给每个@ObjectType()传入对应的业务前缀作为类型名,比如UserAddress、MerchantAddress、ReaderAddress,保证所有类型名全局唯一即可。
验证方法

修改完成后重启项目,打开生成的src/schema.gql文件,确认不存在多个同名的Address类型定义即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:04