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

"Abstract type X must resolve to an Object type at runtime for field Query.user with value

这是我的代码

架构

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
  }
}
}

当我发出请求时我收到错误

"Abstract type X must resolve to an Object type at runtime for field Query.user with value { name: \"Amasia\" }, received \"{ name: \"Amasia\" }\". Either the X type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function."

这是什么原因?

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