首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeGraphql和Prisma 2类型冲突

TypeGraphql和Prisma 2类型冲突
EN

Stack Overflow用户
提问于 2020-10-06 05:36:54
回答 1查看 423关注 0票数 1

我在使用PostgreSQL数据库的Apollo Express服务器上使用TypeGraphql和Prisma2。

我使用Prisma内省我的DB,然后从schema.prisma生成TypeScript类型。

我也有用TypeGraphQL制作的@ObjectType模型类。

我的问题是,我似乎遇到了我的TypeGraphQL类和从Prisma生成的类型之间的类型冲突。例如,我有一个TypeGraphQL Course类,如下所示

代码语言:javascript
复制
@ObjectType()
export class Course {
  @Field(() => Int)
  id: number;

  @Field()
  title: string;
  .......

  @Field(() => User)
  creator: User;
}

Prisma生成如下所示的Course类型:

代码语言:javascript
复制
/**
 * Model Course
 */

export type Course = {
  id: number
  title: string
  .......
  creator_id: number
}

因此,在我的自定义解析器中,当我尝试创建Course时,我说突变返回一种类型的Course。(我有一个使用此服务的控制器,但问题所在的是该服务)

代码语言:javascript
复制
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类型缝合在一起,或者用其他方法呢?

EN

回答 1

Stack Overflow用户

发布于 2020-10-20 17:06:46

在导入类型时,您可以使用as keyword (执行type assertion)并重命名其中一个类型。例如,您可以将Course从Prisma重命名为PrismaCourseDBCourseCourseModel或其他您喜欢的名称。下面是要使用的语法:

代码语言:javascript
复制
import { Course as DBCourse } from '@prisma/client'

然后,在您的解析器中,您可以拥有以下代码:

代码语言:javascript
复制
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;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64216527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档