在TypeScript中使用装饰器扩展类

时间:2017-02-26 17:23:02

标签: javascript typescript

我想用装饰器扩展一个类,但不知道具体如何。我目前的做法如下:

function Foo(value: string) {
    return function(target: Function) {
        let injected = Object.assign(target.prototype, { foo: value });
        return injected;
    }
}

@Foo("Hello world")
class Bar {
}

let instance = new Bar();
console.log(instance.foo); // Should say "Hello World"

但我不能再实例化我的类:“TypeError:Bar不是构造函数”。

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

您不必从装饰器返回新对象。在这种情况下,目标对象将被修改,所以只需

function Foo(value: string) {
  return function(target: Function) {
    Object.assign(target.prototype, { foo: value });
  }
}

应该可以正常工作