2017-06-16 71 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

是的,我相信这是实现我的目标的唯一方法,并且从技术上讲不会破坏整个流程,除非我的代码一致性。 –

相关问题