Prisma 生成的类型会阻碍以后更改数据库层吗?

问题描述

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

解决方法

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

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

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