【发布时间】:2018-03-28 05:17:05
【问题描述】:
我的项目遇到问题,在互联网上找不到任何解决方案。情况如下。
- 我有 2 种类型的 Union (
DataResult) (Teaser&Program) - 我有一个带有
data字段的Zone类型(一个数组DataResult) -
Teaser和Program具有相同的title字段,但类型不同(String与String!)
这是来自Zone、Teaser 和Program 架构的部分内容:
type Program {
title: String
}
type Teaser {
title: String!
}
union DataResult = Teaser | Program
type Zone {
(...)
data: [DataResult!]
}
当我尝试按照下面的查询部分所述查询区域数据时,GraphQL 出现错误。
zones {
...zoneFieldsWithoutData
data {
... on Program {
...programFields
}
... on Teaser {
...teaserFields
}
}
}
这是错误:
Error: GraphQL error: Fields \"title\" conflict because they return conflicting types String and String!. Use different aliases on the fields to fetch both if this was intentional
我不能使用别名,因为规范需要所有“DataResult”实体的相同属性名称。我能做什么?
此外,即使我为title 设置了相同的类型,我也有很多关于控制台中“缺少字段”的警告......
PS:我使用 Vanilla Apollo 作为 GraphQL 客户端(在服务器端)
【问题讨论】:
-
我相信这与github.com/graphql/graphql-js/issues/53和github.com/facebook/graphql/pull/120有关——只要知道具体类型,同名字段就不应该发生冲突。
-
从一个普通的 JS 对象角度来看,你会期待像
{ data { title: 'Title 1', title: 'Title 2' }}这样的东西,这没有多大意义,因为你可能无法区分哪个标题属于 Program 或 Teaser,那就是为什么它坚持使用别名。
标签: javascript graphql apollo