我有一个问题,我需要创建一个查询,该查询将为节点返回不同的可能类型,我还利用__typename属性来确定我收到了哪一个。
我不使用EnumType的原因是因为不同的子类型可能有很大的不同。
其中一些是空的(例如,它们不具有任何属性)。
这会导致问题,因为我无法创建UnionType。
我尝试将ScalarTypes用于这些空定义,但对于Union,我只能使用ObjectTypes,而ObjectTypes需要“字段”定义。
例如,这是我从服务端使用的类的一些定义
classA {
token: string
}
classB {
}
classC {
}
type returnType = classA | classB | classC
对于每个我定义的类型
typeA = GraphQLObjectType ofType classA with fields => {token}
typeB = GraphQLObjectType ofType classB with fields => undefined
typeC = GraphQLObjectType ofType classC with fields => undefined
为查询建立联合类型时发生问题
new GraphQLUnionType({
types: [typeA, typeB, typeC]
})
我想从客户那里做些什么来解决这种情况的正确方法,
query {
myquery {
mode: __typename
... typeA {
token
}
}
我试图将名称作为属性注入,这行得通,因为每种类型都有一个,但这是多余的。
答案 0 :(得分:0)
我可能会通过为原本为空的对象类型添加一些字段来解决此问题。
"""Objects of this type don't have properties."""
type classB {
"""Just a placeholder value; always null."""
_placeholder: Bool
}
一旦有了它就可以正常参与联合类型,并且可以照常查询其__typename
。如果您不想这样做,则不必在查询中特别提及。
query {
myquery {
__typename
... on classA {
token
}
# No need for a fragment ...on classB
}
}