当我在graphQL模式中使用联合类型时,通常会这样使用它:
const documentTypeDefs = gql`
union TestType = TypeExample1 | TypeExample2
type Document {
exampleKey: TestType
}
`
然后我这样解决:
TestType: {
__resolveType(obj) {
if(obj.property1) {
return 'TypeExample1';
}
if(obj.property2) {
return 'TypeExample2';
}
return null;
},
}
但是有时候我在解析函数中得到空对象(即obj
是{}
)。我以为返回null
或undefined
就可以了,但是不幸的是我遇到了错误:
"Abstract type ItemsType must resolve to an Object type at runtime for field Document.exampleKey with value {}, received \"{}\". Either the ItemsType type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function."
那我该如何解决空对象? 谢谢!
答案 0 :(得分:0)
如果将空对象传递给__resolveType
,则意味着您的字段正在解析为空对象。这意味着在您的解析器内部返回的值是一个空对象,或者返回的Promise正在解析为一个。
如果您正在处理一个返回List
的字段,则返回的项目之一也有可能是空对象。如果要获取的文档之一实际上是空的,或者至少缺少您在mongoose
模式中指定的字段,那么在使用MongoDB时,这尤其可能发生。