TypeScript代码编织

时间:2016-02-11 09:08:22

标签: typescript compile-time-weaving

有没有办法在TypeScript中进行代码编织?

我正在尝试做的是将一段代码作为我的TypeScript应用程序中每个函数的第一行注入,我不会手动执行此操作(这种手动方法很繁琐且容易出错)。 / p>

1 个答案:

答案 0 :(得分:4)

虽然不是真正的编译 - 时间编织,但对于类方法,您只能使用method decorators运行时中包含具有附加功能的那些方法。考虑这个示例方法装饰器,它使调用也将接收到的参数记录到控制台中:

// the method decorator function
function log(target: Object, key: string, descriptor: any) {
    // replace original property descriptor of method with the following one:
    return {
        // the new method:
        value: function (...args: any[]) {
            // log arguments
            console.log(args);

            // invoke the original method as part of the new method,
            // and return its returned value (if any)
            return descriptor.value.apply(this, args);
        }
    };
}

将此装饰器应用于方法与以下一样简单:

class Calculator {
    @log
    add(a: number, b: number) {
        return a + b;
    }
}

快速解释:Typescript中的方法装饰器具有以下签名:

<T>(target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor<T>) => PropertyDescriptor<T> | void;

换句话说,方法装饰器接受3个参数:

  1. 定义原始方法的原型对象
  2. 方法的属性键
  3. 方法的属性描述符
  4. 方法装饰器返回单个属性描述符,它取代了该类型的原始方法。