2017-06-16 120 views
0

我想知道是否可以獲取具有作爲此類的實例創建的對象的類的所有屬性。在TypeScript中獲取具有現有對象的類屬性

事情是,我試圖爲任何綁定的實體創建一個通用的管理頁面。我使用TypeORM,並設法獲取所需的實體存儲庫,從中我可以獲取實體對象的實例。

現在,我該如何獲得這個泛型實體的類來迭代它的屬性?我需要它在視圖端創建輸入字段。當我處理現有實體時(至少在我爲它們填充所有數據時),這不是問題,但在嘗試創建新實體時有點難度,因爲我得到的實例是原始空對象並試圖console.dir它返回類似City {}

下面是關於這個問題的一些基本代碼:

public static build(req: Request, res: Response, entityRepository: Repository<any>, args: any) { 
    // ... 
    if (args.action === 'create') { 
     const targetEntity: Function = <Function> entityRepository.target(); 
     let entity = entityRepository.create(); 

     // Now I need to get the class of this entity to 
     //pass it to the view that will display input fields accordingly 
     console.dir(Object.getPrototypeOf(entity)); // Output: City {} 

     // ... 
    } 
} 

UPDATE

我會轉述我的問題。

我遇到了這樣一個事實,即我可以獲取對象的類,但是如果它們沒有定義,我不會得到它的屬性。例如:

class Foo { 
    bar: any; 
} 

在這個類上獲取自己的屬性返回[]

但是:

class Foo { 
    bar: any = ""; 
} 

這將返回['bar']

那麼,即使未定義它們的值,我如何才能獲得CLASS屬性名稱而不是OBJECT屬性名稱?我寧願避免在每個實體上定義每個實體的虛擬值,例如''和0.

+0

可能的重複[如何循環或枚舉JavaScript對象?](https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-對象) – OmG

+0

不幸的是,這並沒有真正的幫助。我需要獲取類屬性,即使它們對於當前對象未定義(並且在我得到一個全新的基於類的對象時,它們實際上就是這種情況)。 –

+0

我知道我可以爲我的實體對象類定義默認屬性,但如果可能的話,我寧願避免這種情況。 –

回答

0

我寧願避免在每個實體上定義每個實體的虛擬值都是''和0。

這樣的虛擬值實際上有助於優化JIT編譯器在JavaScript運行時中生成的機器代碼。

更重要的是,您無法獲取關鍵字名稱,因爲生成的JavaScript沒有內省功能來協助處理這種情況。

另一種方法是嘗試instanceof但只告知類型的類別不是其屬性。

+0

是的,我相信這是實現我的目標的唯一方法,並且從技術上講不會破壞整個流程,除非我的代碼一致性。 –

相關問題