在 TypeScript 中设置/获取类的值的最佳方法是什么?

问题描述 投票:0回答:1

我正在使用 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
                }
            }
        );
    
  • 哪个是最好的解决方案?
  • 还有其他我应该考虑的答案吗?
angular typescript
1个回答
0
投票

使用

toJson()
将要求您在解析 JSON 时始终将恢复器传递给
JSON.parse()
。必须对此进行记录,以便于维护代码。

请使用

Object.defineProperties()
代替。这是一种更详细的方法,但仍然可以让您更好地控制正在发生的事情。除了在
JSON.stringify()
JSON.parse()
中使用之外,控制哪些属性可写、哪些属性可枚举的能力还有其他优点。

© www.soinside.com 2019 - 2024. All rights reserved.