深入理解 Type 和 Interface 在 Prisma 中的实现关系?

新手上路,请多包涵


一直认为implements只能实现interface,今天看到某个开源项目,prisma+nest,通过prisma的类型来定义entity,发现type也能实现,type不是仅仅是一个类型别名吗?
!

阅读 1.2k
3 个回答

image.png
在你提到的情况中,使用 Prisma 和 Nest.js,type 可以用来定义实体(entity),并且可以通过 implements 关键字来实现这些类型。这是因为 Prisma 的模型定义使用了一种特殊的语法,它允许使用 type 来定义数据库实体的结构,然后通过 implements 关键字将这些定义应用于特定的类。这种用法的一个常见示例是在使用 Prisma 时定义数据库模型。例如,假设你有一个名为 User 的实体,你可以使用 type 定义它的结构,然后通过 implements 将该结构应用于实际的类。以上是一个简单的示例:UserEntity 是一个使用 type 定义的实体结构,包含 id、name 和 email 字段。然后,User 类通过 implements 关键字将 UserEntity 应用于自身,并实现了该结构定义中的所有字段。这种用法可以使类型定义更具可重用性,并且可以在不同的类之间共享相同的结构定义。这在使用 Prisma 和 Nest.js 这样的框架时特别有用,因为它们可以让你从数据库模型中生成实体类,并且可以通过 implements 关键字将类型定义应用于这些类。总结来说,尽管 implements 关键字通常用于实现接口,但在某些情况下,你也可以使用它来实现类型,特别是在使用 Prisma 和类似框架时定义实体类时。
image.png

这个问题有人问过, 也回答了, 不知你们什么关系:

https://segmentfault.com/q/1010000044643286

原回答:

在 TS 中,implements操作只是为class提供一种类型约束,没有其他作用,所以,主要是符合class结构的类型都是可以被implements的。所以除了interface之外,type也可以进行implements。但因为 JS 中引入class是照着 OOP 来做的,所以在需要implements时,使用interface有更强的语意性。


不是,并不仅仅是一个类别名

宣传栏