gpt4 book ai didi

angular - Typescript - 没有动态添加属性的字符串化类

转载 作者:太空狗 更新时间:2023-10-29 17:54:11 34 4
gpt4 key购买 nike

我有一组已启动的 typescript 对象,但在代码中我需要动态地向这些对象添加一些属性。如果我需要通过 stingifying 来序列化对象——我该怎么做才能不包含动态添加的属性?因为我有大量的类和内部类,所以我正在寻找一种通用的方法,而不是一个一个地寻找。

因此,作为示例,我有一个按以下方式定义的类:

 export class Car {

public colour: string = '';
public model: string = '';
public diesel?: boolean = false;

constructor () {}
}

现在在代码中我将上面的车设置为我现在驾驶的车:

let car: Car = new Car();
car.model = 'modelA';
car.colour = 'black';

car['active'] = true;

然后在代码的某处我必须使用主动汽车并序列化对象,这样我就可以将数据发送到服务器:

JSON.stringify({'data': car});

我现在正在寻找的是没有动态添加的属性的对象的字符串表示,但方法是通用的,所以我不必描述我想要删除的内容。

所有需要的帮助;-)

最佳答案

您可以维护“已知 key ”列表并在序列化时使用它们:

class Car {
private static keys = ["colour", "model", "diesel"];

public colour: string = '';
public model: string = '';
public diesel?: boolean = false;

constructor() { }

toJsonString(): string {
const data = {};
Car.keys.forEach(key => data[key] = this[key]);

return JSON.stringify(data);
}
}

您可以使用装饰器来创建这个静态列表。

或者:

class Car {
public colour: string = '';
public model: string = '';
public diesel?: boolean = false;

constructor() {
this.toJsonString = function (keys) {
const data = {};
keys.forEach(key => data[key] = this[key]);

return JSON.stringify(data);
}.bind(this, Object.keys(this));
}

toJsonString: () => string;
}

关于angular - Typescript - 没有动态添加属性的字符串化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45309348/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com