“抽象类型X必须在运行时解析为具有值的字段Query.user的对象类型

时间:2019-12-29 13:23:21

标签: node.js graphql-js apollo-server

这是我的代码

模式

gql`
  type Query {
    user: X!
  }
  type User {
    name: String!
  }
  type Time {
    age: Int!
  }
  union X = User | Time
`;

解析器

{
  X: {
    __resolveType: obj => {
      if (obj.name) return { name: "Amasia" };
      if (obj.age) return { age: 70 };
      return null;
    }
  },
  Query: {
    user: () => {
      return {
        name: "Amasia"
      };
    }
  }
}

请求

query {
user{
  ... on User {
    name
  }
  ... on Time {
    age
  }
}
}

我发出请求时会出现错误

  

“抽象类型X必须在运行时解析为字段Query.user的对象类型,其值{名称:\“ Amasia \”},接收到\“ {名称:\” Amasia \“} \”。类型应提供一个\“ resolveType \”函数,或者每种可能的类型应提供一个\“ isTypeOf \”函数。“

原因是什么?

1 个答案:

答案 0 :(得分:1)

resolveType函数应返回一个字符串,其中包含抽象类型应解析为的具体类型的名称。您正在返回一个对象,而不是字符串。在这种情况下,您应该返回"User""Time"