我在使用PostgreSQL数据库的Apollo Express服务器上使用TypeGraphql和Prisma2。
我使用Prisma内省我的DB,然后从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认为它们是相同的,但给出了错误,指出在类型Course中缺少creator,但在类型Course中是必需的。我不确定解决这个问题的最好方法是什么。
有没有什么方法可以把我的TypeGraphQL类和Prisma类型缝合在一起,或者用其他方法呢?
发布于 2020-10-20 17:06:46
在导入类型时,您可以使用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;
};https://stackoverflow.com/questions/64216527
复制相似问题