我已经开始学习如何在应用程序中实现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;

  }

}

这是我得到的错误:



可能是什么问题呢?

最佳答案

您在args函数中缺少Timeout(),应将这些args传递给原始方法:

descriptor.value = function Timeout (...args) {

    setTimeout(() => {

      originalMethod.apply(this, args);

    }, 2000);
};

然后,您应该删除此行,因为它没有执行任何操作:
let decArguments = arguments;

关于javascript - setTimeout()函数的TypeScript装饰器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47134432/

10-10 07:40