private
を含む3つのプロパティを持つクラスModel
を考える。
class Model {
constructor(
public prop1: string,
private prop2: string,
public prop3: number,
) { }
}
Model
クラスのインスタンスをJSON.stringify
でJSON文字列化すると、実行時はJavaScriptになっておりprivate
であることは忘れられているのでprivate
なプロパティまで文字列になってしまう。
const model = new Model("value1", "value2", 3);
console.log(JSON.stringify(model));
// {"prop1":"value1","prop2":"value2","prop3":3}
private
プロパティを表示しないようにするためにはModel
クラスにtoJSON
メソッドを定義する。
toJSON
メソッドの戻り値は、Model
クラスの代わりにJSON文字列化したい値にしておく。(文字列化した結果ではなく)
class Model {
constructor(
public prop1: string,
private prop2: string,
public prop3: number,
) { }
toJSON = () => {
return {
prop1: this.prop1,
prop3: this.prop3,
}
}
// こうではない
// toJSON = () => {
// return JSON.stringify({
// prop1: this.prop1,
// prop3: this.prop3,
// });
// }
}
JSON.stringify
がtoJSON
を持つオブジェクトを文字列化するときはtoJSON
で返却される値を利用してくれる。
const model = new Model("value1", "value2", 3);
console.log(JSON.stringify(model));
// {"prop1":"value1","prop3":3}
参考