[英]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.