2016-04-02 96 views
1

假設我有2個類,A和B. 我想創建一個打字稿註釋,做同樣的事情動態擴展類。 我不能使用擴展,因爲類A只在運行時才知道。所以在結果中,我希望類A擴展B {} 但帶有A動態。動態擴展類在打字稿註釋

我試圖創建註釋:

function extendsWithB(target) { 
    //do something to extends the target with B class 
    return target; 
} 

這可能是這樣的使用:

@extendsWithB 
    Class A {} 

什麼,我應該把我的註釋任何想法?

編輯:這個問題純粹是理論上的。我不想在生產或其他方面嘗試這個。

+0

您不能在運行時擴展該類,因爲TypeScript在運行時不是存在的。相反,在生成的JavaScript中(至少直到es6)沒有類,所以你想要做的事實上是修補在TypeScript類的幫助下生成的最終JavaScript對象。另一點我不明白爲什麼你不使用標準的'擴展'功能。你想創建一個註解,但是你仍然需要在類定義中包含這個註解? – smnbbrv

回答

2

我認爲你可以做這樣的事情會得到類似預期的效果:

export function Ext(bCtor: any) 
{ 
    return (aCtor: any) => 
    { 
     Object.getOwnPropertyNames(bCtor.prototype).forEach(name => { 
      aCtor.prototype[name] = bCtor.prototype[name]; 
     }); 
    } 
} 

,並將其應用:

@Ext(B) 
class A 
{ 
    //... 
} 

當然沒有更多的類型檢查爲打字稿不知道這個黑客。

+1

謝謝。這是我正在尋找的。事實上,我在問這個問題,因爲我想知道爲什麼angular2選擇像@Component一樣使用註釋,而不是像組件一樣擴展組件。 – Cnode