TypeScript декоратор для функции setTimeout()
Я начал изучать, как реализовать декоратор TypeScript в моем приложении. Итак, я начал с setTimeout
, Это декоратор метода, который выполняет метод через некоторое время.
Например:
@Decorators.timeout()
public someMethod () {}
Вот моя реализация:
export class Decorators {
public static timeout (target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>): any {
let originalMethod = descriptor.value;
let decArguments = arguments;
descriptor.value = function Timeout () {
setTimeout(() => {
originalMethod.apply(this, decArguments);
}, 2000);
};
return descriptor;
}
}
Это ошибка, которую я получаю:
Предоставленные параметры не соответствуют ни одной сигнатуре цели вызова
В чем может быть проблема?
1 ответ
Решение
Вам не хватает args
в вашем Timeout()
функционировать, и вы должны пройти те args
к оригинальному методу:
descriptor.value = function Timeout (...args) {
setTimeout(() => {
originalMethod.apply(this, args);
}, 2000);
};
Затем вы должны удалить эту строку, потому что она ничего не делает:
let decArguments = arguments;
Вы можете взглянуть на декоратор задержки в библиотеке utils-decorators: Вот ссылка на документацию: https://github.com/vlio20/utils-decorators
и вот к реализации: https://github.com/vlio20/utils-decorators/blob/master/src/delay/delay.ts