TypeScript 代码编织
TypeScript code weaving
有没有办法在 TypeScript 中进行代码编织?
我想做的是在我的 TypeScript 应用程序中注入一段代码作为每个函数的第一行,我不会手动执行此操作(这种手动方法很乏味且容易出错) .
虽然不正确 编译-time 编织,但对于 class 方法,您可以使用 method decorators 将这些方法包装在 [=24] 处具有附加功能=]运行时。考虑这个示例方法装饰器,它使调用还将接收到的参数记录到控制台中:
// 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 个参数:
- 定义原始方法的原型对象
- 方法的属性键
- 方法的属性描述符
方法装饰器 returns 单个 属性 描述符,它是该类型上原始方法的替代品。
有没有办法在 TypeScript 中进行代码编织?
我想做的是在我的 TypeScript 应用程序中注入一段代码作为每个函数的第一行,我不会手动执行此操作(这种手动方法很乏味且容易出错) .
虽然不正确 编译-time 编织,但对于 class 方法,您可以使用 method decorators 将这些方法包装在 [=24] 处具有附加功能=]运行时。考虑这个示例方法装饰器,它使调用还将接收到的参数记录到控制台中:
// 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 个参数:
- 定义原始方法的原型对象
- 方法的属性键
- 方法的属性描述符
方法装饰器 returns 单个 属性 描述符,它是该类型上原始方法的替代品。