在 TypeScript 中获取 class 个具有现有对象的属性

Get class properties having existing object in TypeScript

我想知道是否可以获取 class 的所有属性,该对象具有作为此 class.

实例创建的对象

问题是我正在尝试为其绑定的任何实体创建一个通用管理页面。我使用 TypeORM 并设法获取所需的实体存储库,我可以从中获取实体对象的实例。

现在,如何让这个通用实体的 class 迭代其属性?我需要它在视图端创建输入字段。当我处理现有实体时(至少当我为它们填写了所有数据时)这不是问题,但在尝试创建新实体时这有点挑战,因为我得到的实例是一个原始的空对象并尝试 console.dir 它 return 类似于 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 {}

        // ...
    }
}

更新

我会解释一下我的问题。

我发现我可以获取对象的 class,但如果它们没有定义,我就无法获取它的属性。例如:

class Foo {
    bar: any;
}

在 class returns [].

上获得自己的财产

但是:

class Foo {
    bar: any = "";
}

这将 return ['bar']

那么,即使没有定义它们的值,我怎样才能得到 CLASS 属性 名称而不是 OBJECT 属性 名称?我宁愿避免在每个具有虚拟值的实体上定义每个 属性,例如 '' 和 0.

I'd prefer to avoid defining every single property on every entity with dummy value like '' and 0.

这样的虚拟值实际上有助于优化 JIT 编译器在 JavaScript 运行时生成的机器码。

更重要的是,您无法获取键名,因为生成 JavaScript 没有内省功能来帮助处理这种情况。

另一种方法是尝试 instanceof 但这只会告诉 class 的 类型 ... 而不是它的属性。