首页 > 解决方案 > 我无法理解传递给 TypeORM 关系装饰器的回调语法

问题描述

我遇到了可以使用各种装饰器定义的 TypeORM 中的关系。例如 -

@OneToOne(type => Profile, profile => profile.user)
@JoinColumn()
profile: Profile;

我无法理解回调type => Profile 。我在网上搜索了它的含义,但无济于事。我也知道我们也可以通过() => Profile ,但我想知道它是什么。

标签: javascriptnode.jstypeorm

解决方案


浏览库的源代码,有一个特殊的注释可以帮助您解决困惑:

由于语言细节和递归引用类的问题,这种类型起作用。

在我的解释中,关系类型参数被包装在一个函数中,因此您可以处理任何关系场景,包括自引用。例子:

@Entity
class User {
  @OneToMany(type => User, user => user.directReports)
  @JoinColumn()
  manager: User;

  @ManyToOne(type => User, user => user.manager)
  directReports: User[];
}

在这种情况下,使用与User类型装饰器相同的类可能会导致错误。函数 wrap 解决了这个问题。

我找不到type该回调的参数的任何用法,正如您所指出的,它也可以是未定义的。正如评论中所指出的,它可能是一个上下文关键字,因此您的代码更具可读性。


推荐阅读