網站搜尋

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 });
  }
}

應該可以正常運作