如何在typescript中检索类中所有属性的属性名称,不包括方法

时间:2017-08-24 16:29:59

标签: typescript

我正在努力使我的代码尽可能具有反应性,并且需要根据类的属性渲染我的视图,如何仅从形式排除方法等的类中检索属性名称。

例如。

export class Customer { 
    customerNumber: string; 
    name: string; 
    salesContact: string; 
    salesContactEmailAddress: string; 
    salesContactNumber: string; 
    execContact: string; 
    constructor(data?: any) {
        ...
    }

    toJSON() {
        ...
    }

    clone() {
        ...
    }
}

我需要它给我一些返回的东西,像这样的字符串数组

fields: string[] = ["customerNumber", "name", "salesContact", "salesContactEmailAddress", "salesContactNumber", "execContact"];

1 个答案:

答案 0 :(得分:1)

JavaScript无法以任何方式保存类的类型信息,因此简短的回答是在大多数情况下都不可能。

Thomas Devries mentioned类似,您无法在TypeScript中执行实际反射。

更长的答案是,只要属性已初始化,就可以在类的实例和中实现。然后你只需使用Object.keys()

这不起作用:

class A {
  prop: string; 

  constructor() {
  }

  fn() {
    // ..
  }
}
const a = new A();
console.log(Object.keys(a)); // []

但这会:

class A {
  prop: string = "hello"; 

  constructor() {
    // Or here:
    // this.prop = "hello";
  }

  fn() {
    // ..
  }
}
const a = new A();
console.log(Object.keys(a)); // ["prop"]

在某些情况下,您可能也想使用Object.getOwnPropertyNames。这与Object.keys()之间有一些重要的区别。

您可以找到有关可枚举性here的更多信息。