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

Jes*_*sus 17 node.js graphql-js apollo-server

这是我的代码

模式

gql`
  type Query {
    user: X!
  }
  type User {
    name: String!
  }
  type Time {
    age: Int!
  }
  union X = User | Time
`;
Run Code Online (Sandbox Code Playgroud)

解析器

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

要求

query {
user{
  ... on User {
    name
  }
  ... on Time {
    age
  }
}
}
Run Code Online (Sandbox Code Playgroud)

当我提出请求时,我得到错误

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

是什么原因。?

Dan*_*den 14

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