typescript - TypeGraphql 和 Prisma 2 类型冲突
问题描述
我在带有 PostgreSQL 数据库的 Apollo Express 服务器上使用 TypeGraphql 和 Prisma 2。
我使用 Prisma 来检查我的数据库,然后从schema.prisma
.
我也有@ObjectType
使用 TypeGraphQL 制作的模型类。
我的问题是我的 TypeGraphQL 类与 Prisma 生成的类型之间似乎遇到了类型冲突。例如,我有一个Course
看起来像这样的 TypeGraphQL 类
@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;
};
但是Course
来自我的 TypeGraphQL 类的Course
类型与 Prisma 生成的类型不同,但它们的名称相同,所以 TypeScript 有点认为它们是相同的,但给出错误说 creator 在 type 中缺少Course
但在 type 中是必需的Course
。不太确定解决此问题的最佳方法是什么。
有什么方法可以将我的 TypeGraphQL 类和我的 Prisma 类型拼接在一起,或者以其他方式进行吗?
解决方案
导入类型时,您可以使用as
关键字(进行类型断言)并重命名其中一种类型。例如,您可以将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;
};
推荐阅读
- javascript - 如何拆分多个graphql查询
- android - 如何在 Android 中以编程方式从外部 SD 卡中删除所有文件或格式化外部 SD 卡?
- javascript - CSS按钮悬停不改变颜色
- sql - 用于存储和计算自定义定价结构的数据库设计
- node.js - 带有承诺放大缓冲区的节点 js getasync
- json - 如何在 Wiremock 请求正文中编码特殊字符?
- azure - 如何使用 Azure 私有 DNS 设置 Aks Ingress
- javascript - 使用变量和 getElementById 和 getElementsByTagName 用 javascript 替换 SRC
- javascript - MVC:发布后数据表不包含任何数据
- python - 覆盖altair的折线图默认分组?