通过装饰器访问方法参数

时间:2018-06-23 15:35:58

标签: typescript decorator

我开始阅读有关creation of decorators以及如何使用它们的信息。 我想知道是否有办法访问装饰器函数内的包装方法参数。

例如,我想创建一个装饰器,记录日志的方法名称和提供的参数。 到目前为止,我只设法访问了方法名称。

  export function logger(target, propertyKey) {
    console.log(propertyKey); //Method name
  }

  @logger
  private fetchData(param) {
   ////
  }

有没有办法让我访问装饰器内部的'fetchData'方法的“ param”?

谢谢。

编辑:

已解决,Link to working example

1 个答案:

答案 0 :(得分:1)

target是类原型。为了在调用过程中访问方法参数,应使用包装器替换方法:

  export function logger(target, propertyKey, descriptor) {
    const originalFn = target[propertyKey];
    descriptor.value = function(param) {
      console.log(param);
      return originalFn.call(this, param);
    };
  }

  ...
  @logger
  private fetchData(param) {}
  ...