2017-02-26 72 views
0

我想用裝飾器擴展一個類,但不知道具體如何。我目前的做法如下:用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:酒吧不是一個構造函數」。

我的錯誤在哪裏?

回答

1

你不必從裝飾器中返回一個新的對象。在這種情況下,目標對象將被修改,所以才

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

應該正常工作

+0

可悲的是,這並不工作。 'bar'對象保持不變,試圖讓'instance.foo'結果'Property'foo'不存在於類型'Bar'上。 – nehalist

+0

@nehalist你在tsconfig中有一個標誌'experimentalDecorators'嗎?它正在我的本地和遊樂場工作https://www.typescriptlang.org/play/ –

+0

@nehalist但是如果你正在談論打字稿的警告,那只是因爲TS編譯器無法解決這個屬性。只是檢查在操場中生成的JS –