Angular 获取父类属性的列表

Angular 获取父类属性的列表,angular,typescript,Angular,Typescript,有什么方法可以在我的typescript中得到这个结果吗 有没有办法直接从类名而不是从对象获取父类的属性列表 我的最终目标是得到这个结果 我想要什么 // test const temp = {a:'testa', b: 'testb', 0: 23, 1: 34, 2:75} const b = new B(temp); // b.b gives testb // b.a gives testa // b.missingProperty gives {0: 23, 1: 34, 2:75}

有什么方法可以在我的typescript中得到这个结果吗 有没有办法直接从类名而不是从对象获取父类的属性列表 我的最终目标是得到这个结果

我想要什么

// test
const temp = {a:'testa', b: 'testb', 0: 23, 1: 34, 2:75}
const b = new B(temp);
// b.b gives testb
// b.a gives testa
// b.missingProperty gives {0: 23, 1: 34, 2:75}

TypeScript编译为JavaScript运行时。显然,在类上声明字段并不会初始化它:

console.log(新的A())//打印:{{uuuuu-proto}}
//注意它如何不打印{a:undefined,b:undefined}
//所以现在你不知道A有什么属性!
console.log(new B())//打印:{missingProperty:{},{uuuuu proto}:{…}
//你也不知道A有什么属性!
如果您想知道在运行时哪些属性属于某个对象,那么您的问题本质上不是一个TypeScript问题,而是一个Javascript问题

现在,运行时无法知道某个属性是否在a中。您可以做的是首先使用a的构造函数初始化这些已知属性,因此
setMissingProperty
将知道B已经拥有这些a继承的属性。然后它可以循环查找B没有的属性

A类{
公共a:字符串;
公共b:字符串;
构造函数(选项){
此.a=选项.a;
this.b=options.b;
}
}
B类扩展了A类{
公共财产:任何;
公共构造函数(res:any){
super(res);//B.a,B.B在这里初始化
this.missingProperty={};
这是setMissingProperty(res);
}
私有setMissingProperty(res:any){
Object.keys(res.forEach)(元素=>{
if(!Object.prototype.hasOwnProperty.call(this,element)){
this.missingProperty[element]=res[element]
}
})
}
}

谢谢兄弟,但告诉我一件事很重要。调用显式绑定此方法的范围。我使用了
对象.prototype.hasOwnProperty
而不是
this.hasOwnProperty
,因为B的原型链上的任何对象都可能重新定义
hasOwnProperty
方法并破坏代码。通常,开发人员不会重新定义
对象.prototype.hasOwnProperty
,因此显式调用此函数更安全。此外,如果使用
对象.prototype.hasOwnProperty
,则必须将作用域绑定到
,否则
对象.prototype.hasOwnProperty('a')
将尝试在
对象.prototype
中查找属性“a”,这不是您想要的。有关更多讨论,请参阅。
// test
const temp = {a:'testa', b: 'testb', 0: 23, 1: 34, 2:75}
const b = new B(temp);
// b.b gives testb
// b.a gives testa
// b.missingProperty gives {0: 23, 1: 34, 2:75}