2016-12-06 35 views
2

如何使用類裝飾器將新屬性添加到類中?如何使用類裝飾器將新屬性添加到類中?

代碼,例如:

@MyClassDecorator 
class MyClass { 
    myFirstName: string; 
    myLastName: string; 
} 

// I need something like this: 
function MyClassDecorator (target: any): any { 
    target['myNickname'] = 'Gambler'; 
} 

let myClass = new MyClass(); 
console.log(myClass['myNickname']); // expecting "Gambler" but got "undefined" 

如何解決這個代碼?

是否有可能使用裝飾添加屬性到類中?

謝謝!

回答

3

你需要的屬性添加到原型,而不是構造函數:

function MyClassDecorator(target: any): any { 
    target.prototype.myNickname = "Gambler"; 
} 

這會得到你想要的東西,但問題是,你不能沒有打字稿,訪問該屬性抱怨:

let myClass = new MyClass(); 
console.log(myClass.myNickname); // error: Property 'myNickname' does not exist on type 'MyClass' 

你可以嘗試這樣的:

function myClassFactory(): MyClass & { myNickname: string } { 
    return new MyClass() as MyClass & { myNickname: string }; 
} 

let myClass = myClassFactory(); 
console.log(myClass.myNickname); // all good 

code in playground

+0

它的工作原理!非常感謝!我的錯誤是 - 我認爲它應該使用一些特殊的方法來做到這一點:))) –

+0

我用這種方法與一個角度組件,它很好,直到我試圖做一個完整的編譯發佈版本,然後你得到各種財產不存在錯誤 –

+0

@Simon_Weaver我將需要看你的代碼,以瞭解爲什麼 –

相關問題