class BaseListener<ListenerMap extends { [key: string]: any }> { 
 | 
  listenerList: ListenerMap[] = []; 
 | 
  
 | 
  fireEvent(eventName: keyof ListenerMap, ...data: any[]) { 
 | 
    this.listenerList.forEach((listener) => { 
 | 
      var callback = listener[eventName]; 
 | 
      callback && callback(...data); 
 | 
    }); 
 | 
  } 
 | 
} 
 | 
  
 | 
type LifeRechargeListenerMap = { 
 | 
  update: (store: any) => any; 
 | 
}; 
 | 
  
 | 
export class LifeRechargeListener extends BaseListener<LifeRechargeListenerMap> { 
 | 
  addListener(listener: LifeRechargeListenerMap) { 
 | 
    this.listenerList.push(listener); 
 | 
  } 
 | 
  
 | 
  removeListener(listener?: LifeRechargeListenerMap) { 
 | 
    if (listener) { 
 | 
      var index = -1; 
 | 
      for (var i = 0, len = this.listenerList.length; i < len; i++) { 
 | 
        if (listener == this.listenerList[i]) { 
 | 
          index = i; 
 | 
        } 
 | 
      } 
 | 
      if (index > -1) { 
 | 
        this.listenerList.splice(index, 1); 
 | 
      } 
 | 
    } else { 
 | 
      this.listenerList = []; 
 | 
    } 
 | 
  } 
 | 
} 
 |