typescript Apollo服务器未按预期返回联合类型

fhity93d  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(119)

我的解析器应该返回一个联合类型,但无论它返回什么(User或一个具有message键和String类型值的对象,即我的UserNotFoundError类型),它总是返回"__typename": "User"。为什么会这样?我如何更正它?
解析器:

async validateUser(
      _: undefined,
      { email, password }: { email: string; password: string }
    ) {
      const user = await prisma.user.findUnique({
        where: {
          email,
        },
      });
      console.log('user before ', user);
      if (!user || user.password !== password) {
        const err = { message: 'Invalid user or password' };
        return err;
      }
      return user;
    },

类型定义

type User {
    email: String!
    password: String
    id: ID!
  }

  type UserNotFoundError {
    message: String!
  }

  union UserOrError = User | UserNotFoundError

  type Query {
    allUsers: [User!]!
    userByEmail(email: String!): User!
    validateUser(email: String!, password: String!): User
  }

在Apollo Studio/Explorer中的结果,无论解析器实际返回的是什么:

{
  "data": {
    "validateUser": {
      "__typename": "User"
    }
  }
}
hm2xizp9

hm2xizp91#

我没有在返回的对象上显式设置__typename
这对我来说是固定的:
第一个

相关问题