Decorators let you add metadata or modify classes, methods, and properties dynamically — a powerful feature for clean, reusable code.
experimentalDecorators in your tsconfig.json to use decorators.
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling ${propertyKey} with`, args);
const result = originalMethod.apply(this, args);
console.log(`Result:`, result);
return result;
};
return descriptor;
}
class Calculator {
@log
add(x: number, y: number) {
return x + y;
}
}
const calc = new Calculator();
calc.add(5, 3);