如何解决TypeGraphql和Prisma 2类型冲突
我在带有PostgreSQL数据库的Apollo Express服务器上使用TypeGraphql和Prisma 2。
我使用Prisma进行数据库自省,然后从schema.prisma
生成了TypeScript类型。
我还有用TypeGraphQL制作的@ObjectType
模型类。
我的问题是我似乎在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认为它们相同,但是给出了错误,指出创建者在类型{{1}中丢失,但在类型Course
中是必需的。不太确定解决此问题的最佳方法是什么。
是否有某种方法可以将我的TypeGraphQL类和Prisma类型缝合在一起或以其他方式进行处理?
解决方法
导入类型时,可以使用as
keyword(执行type assertion)并重命名其中一种类型。您可以例如将Course
从Prisma重命名为PrismaCourse
,DBCourse
或CourseModel
或其他您喜欢的名称。这是用于此的语法:
import { Course as DBCourse } from '@prisma/client'
然后,在您的解析器中,您可以拥有以下代码:
export const createCourseService = async (
prisma: PrismaClient,createCourseInput: CreateCourseInput,userId: number
): Promise<DBCourse> => {
let err,newCourse,foundUser;
const { course,user } = prisma;
.....
[err,newCourse] = await to(
course.create({
data: {
...createCourseInput,creator: {
connect: { id: userId },},})
);
return newCourse;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。