所以我有这样的代码:
const getAllUsers = ({
Model, options,
}) => Model.find(options).catch((e) => {
throw e;
});
@ObjectType({ description: "User model" })
@Entity()
export class UserModel extends BaseEntity {
...
}
@ObjectType()
class Error {
constructor(data: {message: string, code: number}) {
this.message = data.message;
this.code = data.code;
}
@Field(() => Int)
code: number;
@Field(() => String)
message: string;
}
@ObjectType()
class Success {
@Field(() => [ UserModel ])
users: [UserModel];
}
const UserResponseType = createUnionType({
name: "UserResponseType",
types: () => [
Success,
Error,
] as const,
});
@Query(() => [ UserResponseType ])
async getAllUsers(): Promise<typeof UserResponseType> {
const errors = await Promise.resolve([
new Error({
code: 501,
message: "test",
}),
]);
const users = await getAllUsers({
Model: UserModel,
options: {
...
},
}).catch((e) => e);
return {
errors,
success: users,
};
}我想要做的就是返回错误或成功,这样我就可以在查询中做到这一点:
query getAllUsers {
getAllUsers {
... on Success {
user {
id
email
}
}
... on Error {
code
message
}
}
}但现在我得到的是:
TS2322: Type '{ errors: Error[]; success: any; }' is not assignable to type 'Error | Success'.
Object literal may only specify known properties, and 'errors' does not exist in type 'Error | Success'.我试图复制(https://typegraphql.com/docs/unions.html#docsNav)[这个例子],那么如何实现上面提到的查询能力呢?
发布于 2021-05-15 00:02:54
从async getAllUsers()返回的值与声明的返回值Promise<typeof UserResponseType>不匹配,这会导致TS2322错误。
该函数返回具有errors和success属性的对象,但它应返回Error或Success实例。像这样的东西应该是有效的:
import {
createUnionType,
Field,
Int,
ObjectType,
Query,
Resolver,
} from "type-graphql";
@ObjectType({ description: "User model" })
export class UserModel {
@Field()
id: string;
}
@ObjectType()
class Error {
@Field(() => Int)
code: number;
@Field(() => String)
message: string;
}
@ObjectType()
class Success {
@Field(() => [UserModel])
users: UserModel[];
}
const UserResponseType = createUnionType({
name: "UserResponseType",
types: () => [Success, Error] as const,
resolveType: (value) => {
if ("code" in value) {
return Error;
}
if ("users" in value) {
return Success;
}
return undefined;
},
});
@Resolver()
export class UserResolver {
@Query(() => UserResponseType)
async getAllUsers(): Promise<typeof UserResponseType> {
const error: Error = {
code: 501,
message: "test",
};
const success: Success = { users: [{ id: "1" }, { id: "2" }] };
return success;
}
}现在,运行以下查询将返回用户的ids。如果将return success;更改为return error;,则查询将返回错误详细信息。
query getAllUsers {
getAllUsers {
... on Success {
users {
id
}
}
... on Error {
code
message
}
}
}https://stackoverflow.com/questions/65749868
复制相似问题