typescript - Angular 2 no puede hacer constante el JSON de objetos de modelos
Problema: La variable constante con valor como un arreglo de modelos está cambiando sin ningún cambio directo en esa variable.
Mi modelo es :
export class Section {
sectionId : string;
sectionLabel : string;
sectionIcon : string;
sectionComponents : Array<SectionComponent>;
}
Ahora tengo que declarar una variable de arreglo predeterminada de este modelo que debe ser constante en todas partes del proyecto
El JSON apropiado para este modelo es :
SECTIONS_CONST: Section[] = [
{
sectionId: 'testId',
sectionLabel: 'testLabel',
sectionIcon : 'testIcon',
sectionComponents : [
{
sectionComponentId : 'testSectionComponentId',
label : 'test label',
inputModels : [
{
inputName : 'testName',
model : ''
}
],
componentBasedData : null,
selectedQuerys : []
}
]
}
]
Nota: Esta matriz funciona correctamente en mi código, pero el único problema es que en esta matriz ningún valor debe cambiar de ninguna manera.
Probé muchas formas como se indica a continuación :
- Hice esta variable privada en la clase y mediante un método getter devuelve el valor de esta variable
- Exporta esta variable como constante
- Intentó Object.assign({}, tuObjeto);
- Intenté Object.freeze()
- Intenté _.cloneDeep()
Y muchas más cosas intenté.
Todavía intentando con diferentes soluciones pero no puedo hacer que nada funcione.
Respuesta #1
¿Has investigado sobre ReadonlyArray combinado con const?
const SECTIONS_CONST: ReadonlyArray<Section> = ...
Con ReadonlyArray no podrás añadir ni cambiar elementos:
// Not allowed
SECTIONS_CONST.push( ... );
SECTIONS_CONST[0] = ...
Y const previene la reasignación:
// Not allowed
SECTIONS_CONST = [];
Sin embargo, aún puedes cambiar una propiedad en un elemento existente:
SECTIONS_CONST[0].sectionId = null;
Así que también puede que quieras hacer que las propiedades de Section sean de solo lectura:
export class Section {
readonly sectionId : string;
// etc
}
// Not allowed
SECTIONS_CONST[0].sectionId = null;
