网站搜索

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

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

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

应该可以正常工作