TypeScript:函数表达式的装饰器

dq-*_*lie 6 decorator typescript

我正在尝试向函数表达式添加函数装饰器。装饰器适用于函数声明,但不适用于函数表达式。

装饰师

function track(val: string) {

    return function(_target: any, _key: string, descriptor: any)  {

        const originalMethod = descriptor.value;

        descriptor.value = function(...args: any[]) {
           Logger.log(val);
           originalMethod.apply(this, args);
        };

        return descriptor;
    };
Run Code Online (Sandbox Code Playgroud)

我试图注释的函数表达式:如果我尝试像这样装饰,它将不起作用:

const handleClick = @track('trackMe') (e) => { console.log(e) };
Run Code Online (Sandbox Code Playgroud)

或这个:

@trackMetric('sdf')
const handleClick = (e) => { console.log(e) };
Run Code Online (Sandbox Code Playgroud)

我有experimentalDecorators上和目标标志ES5

gil*_*ran 12

你不能装饰一个函数,你只能装饰:

  • 类构造器
  • 类方法
  • 类方法参数
  • 类 getter/setter
  • 类属性

  • Typescript 遵循 ECMAScript,看起来函数提升使事情复杂化......所以事情仍在讨论中:https://github.com/wycats/javascript-decorators/issues/4 (6认同)
  • 为什么呢?装饰函数或函数参数有什么问题? (5认同)