Graphql 检查给定类型是否具有名为X的属性。减少内联片段
我有一个获取一些事件数组的查询。Graphql 检查给定类型是否具有名为X的属性。减少内联片段,graphql,Graphql,我有一个获取一些事件数组的查询。边内的每个节点都可以实现有限数量的接口 问题: 是否可以检查给定节点是否具有名为X的属性(在本例中为id、timestamp和content),而不是使用多个内联片段({Type}) 在这个例子中,我想去掉。。。在类型1上,。。。在Type2上,只需检查id、时间戳和内容属性是否存在。这里有两个答案取决于您试图实现的目标,但简短的答案是否定的:您不能根据读取的值有条件地传播片段 但是,您可以做的是检查接口本身。您提到这些节点都实现接口。所以我假设这些节点要么都实现
边
内的每个节点都可以实现有限数量的接口
问题:
是否可以检查给定节点是否具有名为X的属性(在本例中为id
、timestamp
和content
),而不是使用多个内联片段({Type})
在这个例子中,我想去掉
。。。在类型1上,。。。在Type2上,只需检查id
、时间戳
和内容
属性是否存在。这里有两个答案取决于您试图实现的目标,但简短的答案是否定的:您不能根据读取的值有条件地传播片段
但是,您可以做的是检查接口本身。您提到这些节点都实现接口。所以我假设这些节点要么都实现了一个公共接口,节点
本身要么列出了一个接口,要么列出了多种类型的联合
如果您确保所有类型,TypeN
,都实现了一个包含您试图检查的字段的接口,那么您只需在此接口上散布一个片段:
interface BaseType {
id: ID!
timestamp: DateTime
content: String
}
type TypeA implements BaseType {
id: ID!
timestamp: DateTime
content: String
# ...
}
{
... on BaseType { id timestamp content }
}
给定此接口,您可以查询实现此接口的每种类型:
interface BaseType {
id: ID!
timestamp: DateTime
content: String
}
type TypeA implements BaseType {
id: ID!
timestamp: DateTime
content: String
# ...
}
{
... on BaseType { id timestamp content }
}
即使没有包括所有字段,这也会起作用。例如,我假设content
可能有一个不同的类型,这意味着您不能同时跨所有类型查询它