Tengo una clase abstracta base que quiero que se puedan observar las propiedades públicas, incluidas las mutaciones si esa propiedad es un objeto/matriz/etc. Esta clase base podría asumir una multitud de interfaces y otras propiedades. No quiero que alguien que esté usando esta clase base tenga que preocuparse por eventos, un pub sub o cualquier otro medio de notificación; Quiero que todo esté horneado.
abstract class BaseClass { #stores: Map<any, Function[]> subscribe(prop: NonFunctionPropertyNames<this>, callback: (data: CallbackType)=>void){ // handle subscribe } unsubscribe(prop: NonFunctionPropertyNames<this>, callback: (data: CallbackType)=>void){ // handle unsubscribe } constructor(){ this.#stores = new Map<any, Function[]> } } He intentado esto usando Proxy y get/set cada uno con sus propios pros y contras.
Apoderado
Obtener/Establecer
Puedo vivir con el enfoque Get/Set, pero eso significa que cualquier persona que use esta clase base debe asegurarse de reasignar un accesorio después de cualquier mutación. ¿Hay algún otro enfoque que me esté perdiendo?