https://www.typescriptlang.org/docs/handbook/decorators.html
tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true
}
}
https://github.com/dream-coding-academy/typescript_motion/blob/master/src/decorators/log.ts
function Log(_: any, name: string, descriptor: PropertyDescriptor): PropertyDescriptor {
const newDescriptor = {
...descriptor,
value: function (...args: any[]): any {
console.log(`Calling ${name} with arguments:`);
console.dir(args);
const result = descriptor.value.apply(this, args);
console.log(`Result:`);
console.dir(result);
return result;
},
};
return newDescriptor;
}
class Calculator {
@Log
add(x: number, y: number): number {
return x + y;
}
}
const calculator = new Calculator();
console.log(calculator.add(1, 2));