web-dev-qa-db-ja.com

TypeScriptでクラスデコレータにパラメータを追加するにはどうすればよいですか?

パラメータをとることができるクラスのデコレータ関数を作成したいと思います。

@Plugin("My first Plugin")
class myFirstPlugin {
   ...
}

私はこれを試しましたが、機能しません:

function Plugin(constructor: Function, name:string){
    console.log("Plugin found: " + name);
}

WebStormで次のようなエラーが発生します。

TS2346:指定されたパラメータがコールターゲットのどの署名とも一致しません

このデコレータ関数を作成するにはどうすればよいですか?

12
mvermand

デコレータにパラメータを受信させたい場合は、デコレータ関数が実際のデコレータ関数を返す必要があります。

function PluginDecorator(name: string) {
    return (ctor: Function) => {
        console.log("Plugin found: " + name);
    }
}

@PluginDecorator("My first Plugin")
class myFirstPlugin {}

遊び場のコード

PluginDecoratorがすでに存在し、コンパイラがその名前について文句を言うので、名前をPluginに変更しました。

20
Nitzan Tomer