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

如何在typescript中检索类中所有属性(不包括方法)的属性名,typescript,Typescript,我正试图使我的代码尽可能地反应,并且需要根据类的属性呈现我的视图,如何仅从类中检索属性名称,不包括方法等 比如说 export class Customer { customerNumber: string; name: string; salesContact: string; salesContactEmailAddress: string; salesContactNumber: string; execContact: stri

我正试图使我的代码尽可能地反应,并且需要根据类的属性呈现我的视图,如何仅从类中检索属性名称,不包括方法等

比如说

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"];

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

例如,您不能在TypeScript中执行真正的反射

较长的答案是,在类的实例中,只要属性已经初始化,就有可能实现。那你就用吧

这行不通:

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.key之间有一些重要的区别


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

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

例如,您不能在TypeScript中执行真正的反射

较长的答案是,在类的实例中,只要属性已经初始化,就有可能实现。那你就用吧

这行不通:

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.key之间有一些重要的区别


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

这是无法做到的。当脚本编译为JavaScript时,Typescript将从脚本中删除所有类型信息。这限制了以这种方式使用反射的可能性。这是不可能做到的。当脚本编译为JavaScript时,Typescript将从脚本中删除所有类型信息。这限制了以这种方式使用反射的可能性。