Как добавить параметры к классу decorator в TypeScript?


Я хочу создать функцию декоратора для класса, который может принимать параметр.

Пример

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

Я пробовал это, но это не работает:

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

Я получаю ошибку в WebStorm, говоря:

TS2346: поставляемые параметры не совпадают ни с одной сигнатурой цели вызова

Как мне написать эту функцию декоратора?

1 4

1 ответ:

Если вы хотите, чтобы ваш декоратор получал параметры, то ваша функция декоратора должна возвращать фактическую функцию декоратора:

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

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

(код в playground )

Я изменил имя на PluginDecorator, потому что Plugin уже существует, и компилятор жалуется на это имя.