函数的装饰器

3

我看到,装饰器通常可以用于类和类内的方法。是否有一种方法可以像下面的代码一样将装饰器用于常规函数:

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

someFunction(); // running the function with the decorator.
2个回答

3

2

根据当前的提案,函数不支持装饰器。

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

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(); 

1
是的,我考虑过。但它看起来太啰嗦了 :( - Bogdan Surai
@BogdanSurai 是的,它更冗长了一些,但我认为仍然可读 :) - Titian Cernicova-Dragomir
2
@BogdanSurai - 如果你这样做 function target() { /*...*/ } target = myDecorator(target);,它会变得更简洁一些(我会像上面的Titian那样做,不仅因为提升所需的时间差异,而且还指出了选项)。但是,当它到达这里时,显式语法确实会有所帮助。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接