问题描述
我最近听说了 prisma
并想尝试一下。我真的很喜欢它提供的简单界面和类型安全级别。但是,我有一个问题。当我们使用 prisma
查询实体时,我们得到的响应的类型来自 @prisma/client
(棱镜生成)。虽然它有一些优点,但我认为这是违反开放封闭原则的地方。将来,如果我想将数据库层或 orm 更改为 typeorm
,那么我的服务方法的所有返回类型都必须更改以反映我的实体(而不是之前的 prisma 生成的类型)。在 nestjs 的上下文中考虑它,我们有实体是我们常见的返回类型。有没有办法用prisma来解决这个问题?或者根本就不是问题?
解决方法
在这种情况下,我看到的唯一方法是创建您自己的自定义类型,将 Prisma 的类型作为图层包含在内。例如
type UserWithPosts = Prisma.UserGetPayload<{
include: { posts: true }
}>
Prisma 的类型系统比 TypeORM 之类的系统更先进,您可以很容易地输入这样的输出。因此,如果您以后甚至想更改 ORM,只需将这些类型更改为 ORM 支持的类型即可。