【发布时间】:2021-01-20 18:51:36
【问题描述】:
我在带有 PostgreSQL 数据库的 Apollo Express 服务器上使用 TypeGraphql 和 Prisma 2。
我使用 Prisma 来检查我的数据库,然后从 schema.prisma 生成 TypeScript 类型。
我的 @ObjectType 模型类也使用 TypeGraphQL。
我的问题是我的 TypeGraphQL 类与 Prisma 生成的类型之间似乎遇到了类型冲突。例如,我有一个 TypeGraphQL Course 类,看起来像这样
@ObjectType()
export class Course {
@Field(() => Int)
id: number;
@Field()
title: string;
.......
@Field(() => User)
creator: User;
}
并且 Prisma 生成一个如下所示的 Course 类型:
/**
* Model Course
*/
export type Course = {
id: number
title: string
.......
creator_id: number
}
所以在我的自定义解析器中,当我尝试创建Course 时,我说突变返回Course 的类型。 (我有一个使用此服务的控制器,但该服务是问题所在)
export const createCourseService = async (
prisma: PrismaClient,
createCourseInput: CreateCourseInput,
userId: number
): Promise<Course> => {
let err, newCourse, foundUser;
const { course, user } = prisma;
.....
[err, newCourse] = await to(
course.create({
data: {
...createCourseInput,
creator: {
connect: { id: userId },
},
},
})
);
return newCourse;
};
但是来自我的 TypeGraphQL 类的 Course 类型与 Prisma 生成的 Course 类型不同,但它们的名称相同,因此 TypeScript 有点认为它们是相同的,但给出并错误说创建者在 Course 类型中缺少,但在 Course 类型中需要。不太确定解决此问题的最佳方法是什么。
有什么方法可以将我的 TypeGraphQL 类和我的 Prisma 类型拼接在一起,或者以其他方式进行吗?
【问题讨论】:
-
一个类型可以有两个冲突的定义,只要你不在同一个文件中使用它们。在您声明
createCourseService的文件中,确保从具有Course类的文件中导入Course。 -
@LindaPaiste 这就是我正在做的事情。 Course 类被标记为 createCourseService 的返回类型,但 prisma.course.create() 返回的 Course 类型是 prisma 生成的类型,因此这两种类型相互冲突
标签: typescript graphql prisma typegraphql