graphQL中具有联合类型的空对象

时间:2019-05-27 15:00:05

标签: express graphql

当我在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{})。我以为返回nullundefined就可以了,但是不幸的是我遇到了错误:

"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."

那我该如何解决空对象? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果将空对象传递给__resolveType,则意味着您的字段正在解析为空对象。这意味着在您的解析器内部返回的值是一个空对象,或者返回的Promise正在解析为一个。

如果您正在处理一个返回List的字段,则返回的项目之一也有可能是空对象。如果要获取的文档之一实际上是空的,或者至少缺少您在mongoose模式中指定的字段,那么在使用MongoDB时,这尤其可能发生。