将参数传递给打字稿装饰器

时间:2020-02-28 17:52:48

标签: node.js mongodb typescript mongoose nestjs

因此,我正在使用Mongo作为数据库,在nestjs中开发CRUD服务器,并且试图将可以从服务构造函数(@InjectConnection() private connection?: mongoose.Connection)获得的数据库连接注入到装饰器中。通过执行@Decorator(this.connection)。这是不可能的,因为装饰器工厂会在初始化与数据库的连接之前运行。因此,每次使用装饰器时,连接都是未定义的。有这种情况的解决方法吗?我真的不想使用打字稿装饰器来实现该解决方案。

1 个答案:

答案 0 :(得分:0)

打字稿中的

装饰器有3个参数。 target是类的原型,key是将装饰器应用到的键,而第三个描述符则是更改键的值。本质上,当您键入@Decorator时,打字稿将其视为函数。这就是您定义装饰器的方式。

@Decorator=function Decorator(target:any,key:string,desc:PropertyDescriptor){}

现在您要这样写

@Decorator()

这意味着您还向右侧添加了其他()。这是简单的数学。

  @Decorator()=function Decorator()(target:any,key:string,desc:PropertyDescriptor){}

要做的是将装饰器定义为函数,该函数返回具有这些参数的函数。

function Decorator(...args){
   return function(target:any,key:string,desc:PropertyDescriptor){
   // you can access to ...args here
 }}