我正在使用 Angular 和 TypeScript 开发一个程序。我有一个名为 Signal 的类,它具有以下参数:
export class Signal {
id: number;
obraId: number;
obra: string;
descripcion: string;
rangoInferior: string;
rangoSuperior: string;
unidades: string;
// more parameters
// I use ofJson method to create a Signal object
static ofJson(signalJson: ISignalJson): Signal {
return this.createSignal(signalJson.id, signalJson.obraId, signalJson.obra,
signalJson.descripcion, signalJson.rangoInferior, signalJson.rangoSuperior,
signalJson.unidades
);
}
static createSignal(id: number, obraId: number, obra: string,descripcion: string, rangoInferior: string, rangoSuperior: string,
unidades: string
): Signal {
const new_signal = new Signal();
new_signal.id = id;
new_signal.obraId = obraId;
new_signal.obra = obra;
new_signal.descripcion = descripcion;
new_signal.rangoInferior = rangoInferior;
new_signal.rangoSuperior = rangoSuperior;
new_signal.unidades = unidades;
return new_signal;
}
}
当我从API获取数据时,一些参数(
descripcion
,rangoInferior
,rangoSuperior
)具有null
值,我想设置为空字符串。为了实现这一点,我使用私有属性和 getters/setters。
示例:
private _descripcion: string;
public get descripcion(): string {
return this._descripcion;
}
public set descripcion(value: string) {
this._descripcion = value ? value : "";
}
问题在于该对象将带有下划线的字段发送到 API 并返回错误。
{
"_descripcion": "lll5",
"id": 621284,
"obra": "INTEGRATION-TESTS",
"obraId": 378,
"_rangoInferior": '',
"_rangoSuperior": '',
"_unidades": ''
}
我看到了几个解决这个问题的答案:
toJson
方法并删除下划线。Object.defineProperties
如下:
Object.defineProperties(this,
{
_descripcion: { writable: true, enumerable: false },
descripcion: {
get() { return this._descripcion; },
set(value: string) { this._descripcion = value ? value : ""; },
enumerable: true
}
}
);
使用
toJson()
将要求您在解析 JSON 时始终将恢复器传递给 JSON.parse()
。必须对此进行记录,以便于维护代码。
请使用
Object.defineProperties()
代替。这是一种更详细的方法,但仍然可以让您更好地控制正在发生的事情。除了在 JSON.stringify()
和 JSON.parse()
中使用之外,控制哪些属性可写、哪些属性可枚举的能力还有其他优点。