Estoy enfrentando un problema realmente difícil. Quiero crear una clase contenedora que pueda hacer algo como "anular" el estado del niño sin afectar el estado del niño. Bastante difícil de entender, lo sé.
Veamos un código mínimo a continuación:
class State{ key: string; //Unique key //This is really complex, nested, array, etc state. value: number | string | State | State[] | any } class Child{ state : State; } class Wrapper{ overrideState: State; child: Child; constructor(child: Child){ this.child = child; } getFinalState() : State{ //This will return the new State (or not), that is the final state } }Una función para llamarlos:
function client(){ let child = new Child(); child.state = new State(); child.state.value = {} child.state.value.a = "a value original"; child.state.value.b = "b value original"; let parent = new Wrapper(child); parent.overrideState = new State(); parent.overrideState.value = {} parent.overrideState.value.a = "overrided" parent.overrideState.value.c = "c overrided" console.log(parent.getFinalState().value.a); //It should be `overrided`, console.log(child.state.value.a); //It should still `a value original`, console.log(parent.getFinalState().value.b); //It should be `b value original`, console.log(parent.getFinalState().value.c); //It should be `undefined` because c is not exists in `Child`, } El problema es que la clase de State es realmente compleja.
En realidad, casi terminé con la función getFinalState usando bucles, comprobando el tipo, Lodash.cloneDeep ,... un montón de código. Y creo que es realmente complejo de mantener, difícil de leer y tal vez tiene algún riesgo.
No creo que mi camino sea el correcto, trato de investigar algunos patrones de diseño pero sigo atascado. Si tienes alguna idea, palabras clave o algo así. Realmente aprecio eso. Gracias