Декоратор Typescript, обманывающий 2 аргумента, как это скомпилировать?

Я читал больше о декораторах в машинописи и ES7. И я попробовал этот простой код:

function decorator(...args) {
    console.log(args);
}

//@decorator
class foo {
    constructor() {}

    @decorator
    method() {}
}

let bar = new foo();
bar.method();

Вот что я получаю в консоли:

$ npm install -g typescript@2.1.15
$ npm install -g @types/node
$ tsc --experimentalDecorators file.ts
$ node file.js
[ foo { method: [Function] }, 'method' ]

Всего два аргумента.

Однако, если я выполню это на игровой площадке, у меня будет этот результат

Array[3]

Где Arra[0] и Array[2] являются объектами, а Array[1] является строкой.

Как это возможно? Кроме того, как мне правильно скомпилировать машинопись с экспериментальными декораторами?

Мои наилучшие пожелания...

1 ответ

Решаемые. Согласно https://www.typescriptlang.org/docs/handbook/compiler-options.html целью по умолчанию является ES3.

Установка цели в ES5 решает проблему:

$ tsc --experimentalDecorators -t 'es5' t.ts && node t.js
[ foo { method: [Function] },
  'method',
  { value: [Function],
    writable: true,
    enumerable: true,
    configurable: true } ]

С уважением.

Другие вопросы по тегам