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

Другие вопросы по тегам