代码示例
function logParameter(target: Object, propertyKey: string | symbol, parameterIndex: number) {
return function (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`参数 ${parameterIndex} 的值为:`, args[parameterIndex]);
return originalMethod.apply(this, args);
};
return descriptor;
};
}
class ExampleClass {
someMethod(@logParameter param: string) {
console.log(`方法接收到参数: ${param}`);
}
}
const example = new ExampleClass();
example.someMethod('test');
应用场景
- 日志记录:可以在参数装饰器中记录方法传入的参数值,方便调试和审计。比如在上述代码中,通过参数装饰器打印出了方法传入参数的值,在开发和维护过程中可以快速定位问题。
- 参数验证:在方法执行前,获取参数值进行验证。例如检查参数是否符合特定格式、范围等,如果不符合可以抛出异常或采取其他处理方式,确保方法执行的正确性和稳定性。
- 权限控制:根据传入的参数值,判断当前调用是否具有足够权限。比如某些方法需要特定参数值才允许特定角色调用,通过参数装饰器获取参数并进行权限检查。