mvermand mvermand - 1 month ago 17
TypeScript Question

How to add parameters to a class decorator in TypeScript?

I want to create a decorator function for a class that can take a parameter.

Example

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


I tried this, but it does not work:

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


I get an error in WebStorm saying:


TS2346: Supplied parameters do not match any signature of call target


How do I need to write this decorator function?

Answer

If you want your decorator to receive parameters then your decorator function needs to return the actual decorator function:

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

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

(code in playground)

I changed the name to PluginDecorator because Plugin already exists and the compiler complains about that name.