[英]How to access parameter names (or get args as an object) in method decorator in typescript?
我正在尝试访问方法装饰器中的参数名称。
function log(filter: string[] = []) {
return function(
target: any,
propertyKey: string,
descriptor: PropertyDescriptor,
) {
const originalFunc = descriptor.value;
descriptor.value = async function(...args: any[]) {
this.logger.log(
`Start ${propertyKey} function`,
`${this.constructor.name}.${propertyKey}`,
);
// filter is parameter names: to not log them
this.logger.verbose(
`${propertyKey} function Input Parameters is ${args}`,
);
const result = await originalFunc.apply(this, args);
this.logger.verbose(`${propertyKey} function returned: ${result}`);
this.logger.log(`End ${propertyKey} function`);
return result;
};
return descriptor;
};
}
我想做的是编写一个记录器装饰器。 这个装饰器将记录方法名称及其参数,以及方法运行后的结果。 这没问题,但我还想过滤记录的参数。
我们不知道我们会得到什么参数,或者有多少参数会导致这个装饰器被用于各种方法。
我能想到的一种方法是获取参数名称。 例如:如果该方法具有三个参数arbitraryMethod(name: string, age: number, married: boolean)
,我想将其作为以下内容:
argNames = ['name', 'age', 'married'];
argValues = ['Jack', 23, false];
或者通过这种方式获取:
const args {
name: 'Jack',
age: 23,
married: false
};
还有一些其他的过滤方法,即获取索引而不是参数名称,并根据它进行过滤,但它不会优雅和漂亮,而且可能有点难以使用。 所以我避免使用这种方法。
如果有的话,我愿意接受任何其他解决方案。 提前致谢。
一旦您想使用原始的 function,就可以在装饰器内部访问参数数组,因为它们都在args[]
参数中
descriptor.value = function (...args: any[]) {
// now you can access to args[0, 1...]
// Call the original function if needed
return originalValue.apply(this, args);
};
希望这可以帮助,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.