2017-11-06 9 views
2

私はアプリケーションでTypeScriptデコレータを実装する方法を学び始めました。 だから私はsetTimeoutで始まった。しばらくしてからメソッドを実行するメソッドデコレータです。例えばsetTimeout()関数用のTypeScriptデコレータ

:ここ

@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; 

    } 

} 

これは私が取得していますエラーです:

提供されたパラメータは、コールターゲットのいずれかの署名と一致しません。

何が問題なのですか?

答えて

4

あなたのTimeout()機能でargsが欠落していて、元のメソッドにそれらのargsを渡す必要があります。

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

    setTimeout(() => { 

     originalMethod.apply(this, args); 

    }, 2000); 
}; 

それは何もしていないので、あなたは、この行を削除する必要があります:

let decArguments = arguments; 
+1

うん、それはです働くありがとうございました!あなたは私の日を救った)) –

関連する問題