一尘不染

结合使用JSON.stringify和TypeScript getter / setter

json

我在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密钥写入字符串输出之前手动对其进行修改。我很好奇是否有更简单的解决方案。

这是一个JSFiddle,它演示了当前的行为。


阅读 246

收藏
2020-07-27

共1个答案

一尘不染

不,您不能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}
2020-07-27