如何在TypeScript中向类装饰器添加参数?

时间:2016-10-13 19:09:55

标签: typescript decorator typescript1.8

我想为可以获取参数的类创建一个装饰器函数。

实施例

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

我试过这个,但它不起作用:

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

我在WebStorm中收到错误说:

  

TS2346:提供的参数与呼叫目标的任何签名

都不匹配

我如何编写这个装饰器功能?

1 个答案:

答案 0 :(得分:17)

如果您希望装饰器接收参数,那么装饰器函数需要返回实际的装饰器函数:

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

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

code in playground

我将名称更改为PluginDecorator,因为Plugin已经存在且编译器抱怨该名称。