【发布时间】:2017-11-03 01:34:21
【问题描述】:
我有以下类结构:
export abstract class PersonBase {
public toJSON(): string {
let obj = Object.assign(this);
let keys = Object.keys(this.constructor.prototype);
obj.toJSON = undefined;
return JSON.stringify(obj, keys);
}
}
export class Person extends PersonBase {
private readonly _firstName: string;
private readonly _lastName: string;
public constructor(firstName: string, lastName: string) {
this._firstName = firstName;
this._lastName = lastName;
}
public get first_name(): string {
return this._firstName;
}
public get last_name(): string {
return this._lastName;
}
}
export class DetailPerson extends Person {
private _address: string;
public constructor(firstName: string, lastName: string) {
super(firstName, lastName);
}
public get address(): string {
return this._address;
}
public set address(addy: string) {
this._address = addy;
}
}
我试图让toJSON 输出整个对象层次结构中的所有getter(不包括私有属性)。
所以如果我有一个DetailPerson 实例并调用toJSON 方法,我希望看到以下输出:
{
"address": "Some Address",
"first_name": "My first name",
"last_name": "My last name"
}
我使用了来自 this Q&A 的解决方案之一,但它不能解决我的特定用例 - 我没有得到输出中的所有 getter。
我需要在此处进行哪些更改才能获得我想要的结果?
【问题讨论】:
-
您是否在
Person和DetailPerson类上定义了方法toJsonString,如您链接的帖子中所示?我没有在您发布的代码中看到它们的定义。 -
请提供minimal reproducible example,显示您要解决的确切问题。
-
已修改。
-
@Daz 也许您想再次编辑这个问题?据我所知,添加到
PersonBase的toJSON方法不会返回来自DetailPerson的getter。此外,问题的前一个措辞更清楚地表明您想要省略“私有”属性(即您只想要 getter)。 -
进行了其他编辑。
标签: javascript json typescript getter