Может ли декоратор класса получать как функцию-конструктор, так и дополнительные аргументы?

Я играл с Babel и декораторами. Например:

function test(target) { 
}

@test
class A {}

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

function test(target, arg1, argN) {
   // target will be "hello", arg1 will be "world" and argN undefined,
   // while I would expect target to be the constructor function
}

@test("hello", "world")
class A {}

person Matías Fidemraizer    schedule 07.01.2016    source источник
comment
Почему бы вам не попробовать и не посмотреть, как это работает?   -  person    schedule 11.01.2016
comment
@torazaburo Почему бы тебе внимательно не прочитать мой вопрос? :D См. комментарий внутри функции test. Тебе не кажется, что я уже пробовал себя?   -  person Matías Fidemraizer    schedule 12.01.2016
comment
Здравствуйте, я не знаю точно, что вы пытались, но если бы вы запустили свою программу через узел Babel или аналогичный, вы бы получили сообщение об ошибке undefined is not a function или эквивалент. Из этого можно сделать вывод, с помощью просмотра транспилированного кода, если это необходимо, что проблема заключается в том, что @test("hello", "world') не определено, поскольку вы ничего не возвращаете из test, в то время как оно должно оцениваться как функция, к которой будет привязан декорируемый объект. пройти.   -  person    schedule 12.01.2016
comment
@torazaburo Неправильно, это работало так, как я описал в своем вопросе ... Может быть, вы описываете, что реальный ES2015 выдаст в моем случае, но, если я не ошибаюсь, весь образец ведет себя так, как я описал в своем вопросе ...   -  person Matías Fidemraizer    schedule 12.01.2016


Ответы (1)


Это работает так

function test(target, arg1, argN) {
  return function(clazz) {
     console.log(target, arg1, clazz)
  } 
}

@test("hello", "world")
class A {}
person Vladimir Danchenkov    schedule 11.01.2016