一直认为implements只能实现interface,今天看到某个开源项目,prisma+nest,通过prisma的类型来定义entity,发现type也能实现,type不是仅仅是一个类型别名吗?
!
一直认为implements只能实现interface,今天看到某个开源项目,prisma+nest,通过prisma的类型来定义entity,发现type也能实现,type不是仅仅是一个类型别名吗?
!
这个问题有人问过, 也回答了, 不知你们什么关系:
https://segmentfault.com/q/1010000044643286
原回答:
在 TS 中,implements操作只是为class提供一种类型约束,没有其他作用,所以,主要是符合class结构的类型都是可以被implements的。所以除了interface之外,type也可以进行implements。但因为 JS 中引入class是照着 OOP 来做的,所以在需要implements时,使用interface有更强的语意性。
在你提到的情况中,使用 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 和类似框架时定义实体类时。