Я хочу написать декоратор журналов, который регистрирует каждый раз, когда вызывается функция (в которой декоратор декорирует). Я хочу записать ключ, который декоратор принимает в качестве параметра, и аргументы, с которыми была отправлена функция.
До сих пор я знал, как написать простую функцию журнала, которая регистрирует аргументы функции, но не может принимать любые параметры :
export function logger(
target: Object,
key: string,
descriptor: PropertyDescriptor
) {
const original = descriptor.value;
descriptor.value = function() {
const targetName = target.constructor.name;
const args = JSON.stringify(arguments);
console.log(`Calling ${targetName}.${key} with ${JSON.stringify(arguments)}`);
const result = original.apply(this, arguments);
return result;
};
return descriptor;
}
Я также знаю, как написать декоратор, который принимает параметры:
log(logData: { value: string; target?: string }) {
return function(
target: Object,
key: string,
descriptor: PropertyDescriptor
) {
console.log(`Key: ${logData.value}, Target: ${logData.target}`);
};
}
Так что вы, вероятно, можете догадаться, что мне не хватает ссылки здесь, чтобы написать декоратор журнала который может принять ключ в качестве параметра и записать этот ключ в аргументы, с которыми была вызвана декорированная функция.
У меня есть рабочий пример этих двух декораторов: https://stackblitz.com/edit/angular-udi-decorators?file=src%2Fapp%2Flogger.ts