首页 > 解决方案 > Prisma 生成的类型会阻碍以后更改数据库层吗?

问题描述

我最近听说prisma并想尝试一下。我真的很喜欢它提供的简单界面和安全级别。但是,我有一个问题。当我们prisma用来查询实体时,我们得到的响应具有来自@prisma/client(prisma generated)的类型。虽然它有一些优点,但我认为这是违反开放封闭原则的地方。将来,如果我想将数据库层或 orm 更改为,typeorm则必须更改我的服务方法的所有返回类型以反映我的实体(而不是以前的 prisma 生成的类型)。在nestjs 的上下文中考虑它,其中我们有作为我们常见返回类型的实体。有没有办法用棱镜解决这个问题?或者这根本不是问题?

标签: design-patternsnestjstypeormprismaopen-closed-principle

解决方案


在这种情况下,我看到的唯一方法是创建您自己的自定义类型,将 Prisma 的类型作为一个层包含在内。例如

type UserWithPosts = Prisma.UserGetPayload<{
  include: { posts: true }
}>

Prisma 的类型系统比 TypeORM 之类的系统更先进,您可以很容易地输入这样的输出。因此,如果您以后甚至想更改 ORM,只需将这些类型更改为 ORM 支持的类型。


推荐阅读