我正在努力使我的代码尽可能具有反应性,并且需要根据类的属性渲染我的视图,如何仅从形式排除方法等的类中检索属性名称。
例如。
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"];
答案 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的更多信息。