【问题标题】:Decorators for functions函数的装饰器
【发布时间】:2019-05-26 09:57:31
【问题描述】:

正如我所见,装饰器通常可以与类和类中的方法一起使用。有没有办法使用带有常规功能的装饰器,如下面的代码:

@myDecorator()
function someFunction() {
  // do something
}

someFunction(); // running the function with the decorator.

【问题讨论】:

    标签: javascript function typescript decorator ecma


    【解决方案1】:

    不适用于the current proposal。装饰独立函数、对象初始化器及其内容或其他东西很可能是后续提案,但当前提案仅允许装饰类及其内容。

    【讨论】:

      【解决方案2】:

      目前proposal的函数不支持装饰器

      您可以使用简单的函数调用来获得类似的结果:

      function myDecorator<Args extends any[], R>(fn: (...a: Args)=> R): (...a:Args) =>R {
          return function (...a: Args) {
              console.log("Calling");
              return fn(...a);
          } 
      }
      const someFunction = myDecorator(function () {
          console.log("Call");
      });
      
      someFunction(); 
      

      【讨论】:

      • 是的。我想了想。但它看起来太冗长:(
      • @BogdanSurai 是的,它有点冗长但我认为仍然可读:)
      • @BogdanSurai - 如果你像function target() { /*...*/ } target = myDecorator(target); 那样做,你可以让它不那么冗长(我会做上面提香所做的,尤其是因为吊装导致的时间间隔;只是指出选项)。但是,是的,当它到达这里时,显式语法将对此有所帮助。
      猜你喜欢
      • 2010-10-27
      • 2011-06-06
      • 2011-06-25
      • 2011-10-04
      • 2014-07-21
      • 2021-04-19
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多