【发布时间】:2017-08-17 07:55:38
【问题描述】:
我正在尝试将函数装饰器添加到函数表达式。 装饰器适用于函数声明,但不适用于函数表达式。
装饰器:
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;
};
我要注释的函数表达式: 如果我尝试这样装饰,它将不起作用:
const handleClick = @track('trackMe') (e) => { console.log(e) };
或者这个:
@trackMetric('sdf')
const handleClick = (e) => { console.log(e) };
我有 experimentalDecorators 标记并针对 ES5。
【问题讨论】:
-
Right, as stated in the docs: “随着 TypeScript 和 ES6 中 Classes 的引入,现在存在某些需要附加功能来支持注释或修改的场景 类和类成员。装饰器提供了一种为类声明和成员添加注释和元编程语法的方法。”。只有类可以被装饰。
-
目前不支持函数的装饰器,但 TS 遵循正在进行中的 ES 装饰器提案,请参阅github.com/iddan/proposal-function-expression-decorators/issues/…
标签: typescript decorator