Javascript 函数的装饰器

Javascript 函数的装饰器,javascript,function,typescript,decorator,ecma,Javascript,Function,Typescript,Decorator,Ecma,如我所见,装饰器通常可以与类内的类和方法一起使用。有没有一种方法可以将decorator与以下代码中的常规函数一起使用: @myDecorator() function someFunction() { // do something } someFunction(); // running the function with the decorator. 没有。装饰独立函数、对象初始值设定项及其内容或其他内容可能是后续建议,但当前建议仅允许装饰类及其内容。根据当前建议,函数不支持装饰器

如我所见,装饰器通常可以与类内的类和方法一起使用。有没有一种方法可以将decorator与以下代码中的常规函数一起使用:

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

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

没有。装饰独立函数、对象初始值设定项及其内容或其他内容可能是后续建议,但当前建议仅允许装饰类及其内容。

根据当前建议,函数不支持装饰器

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

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(); 
函数myDecorator(fn:(…a:Args)=>R):(…a:Args)=>R{
返回函数(…a:Args){
控制台日志(“调用”);
返回fn(…a);
} 
}
const someFunction=myDecorator(函数(){
控制台日志(“调用”);
});
someFunction();

是的。我想了想。但是它看起来太冗长了:(@BogdanSurai是的,它有点冗长,但我认为它仍然可读:)@BogdanSurai-如果你按照
function target(){/*…*/}target=myDecorator(target)的方式来做,你可以让它不那么冗长(我会像提香那样做,不仅仅是因为吊装造成的时间间隔;只是指出了选项)。但是是的,显式语法将有助于实现这一点。