我有Person类继承的BaseEntity类。如何在Person类中列出基类属性(BaseEntity)。
cat main.ts
在派生类(人)方法之一中尝试使用class BaseEntity {
_id: string;
created: number;
constructor(id: string, created: number = Date.now()) {
this._id = id;
this.created = created;
}
}
class Person extends BaseEntity {
name: string;
age: number;
constructor(id: string, name: string, age: number) {
super(id);
this.name = name;
this.age = age;
}
listBaseClassProperties() {
//console.log(super); HOW CAN I DO THIS?
}
}
时,我得到console.log(super)
...
答案 0 :(得分:1)
这听起来像an X/Y problem,但解决了实际提出的问题:
您使用的对象不会区分从基类代码获得的属性和从派生类代码获得的属性。它们只是对象的属性。如果要获取基类在初始化期间添加的属性的列表,请在调用super();
后立即执行此操作以获取所有自己的,可枚举的属性的名称。当时的对象:
this.baseProperties = Object.keys(this);
...假设您不使用TypeScript的自动属性初始化(您不在问题代码中)。
然后在listBaseClassProperties
中输入
console.log(this.baseProperties.map(name => ({name, value: this[name]}));
...或者您可以使用从Object.keys
获得的名称列表的其他几种方式中的任何一种。
当然,基类中的代码可以随时添加属性,但是TypeScript的静态类型系统强烈建议不要这样做,因此,获取初始化后立即存在的属性可能是Good Enough™。 ;-)