Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphql 检查给定类型是否具有名为X的属性。减少内联片段_Graphql - Fatal编程技术网

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
可能有一个不同的类型,这意味着您不能同时跨所有类型查询它