gpt4 book ai didi

json - 将 JSON.stringify 与 TypeScript getter/setter 结合使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:06 25 4
gpt4 key购买 nike

我在 TypeScript 中使用 getter/setter 访问器。由于变量和方法的名称不可能相同,因此我开始在变量前加上短划线作为前缀,就像在许多示例中所做的那样:

private _major: number;

get major(): number {
return this._major;
}
set major(major: number) {
this._major = major;
}

现在当我使用 JSON.stringify() 方法将对象转换为 JSON 字符串时,它将使用变量名作为键:_major。

由于我不希望 JSON 文件的所有键都以小破折号为前缀,是否有可能让 TypeScript 使用 getter 方法的名称(如果可用)?或者是否有任何其他方法可以使用 getter/setter 方法但仍然产生干净的 JSON 输出?

我知道有一些方法可以在将 JSON 键写入字符串输出之前手动修改它们。不过,我很好奇是否有更简单的解决方案。

Here is a JSFiddle这展示了当前的行为。

最佳答案

不,您不能让 JSON.stringify 使用 getter/setter 名称而不是属性名称。

但是你可以这样做:

class Version {
private _major: number;

get major(): number {
return this._major;
}

set major(major: number) {
this._major = major;
}

toJsonString(): string {
let json = JSON.stringify(this);
Object.keys(this).filter(key => key[0] === "_").forEach(key => {
json = json.replace(key, key.substring(1));
});

return json;
}
}

let version = new Version();
version.major = 2;
console.log(version.toJsonString()); // {"major":2}

关于json - 将 JSON.stringify 与 TypeScript getter/setter 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40080473/

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