/**
 *  An Observer is a class that has a listener method that accepts a value of type T
 *  and calls the listener method with a value of type T
 */
export declare class Observer<T> {
  private accept;
  private listener;
  /**
   * It accepts a function that accepts a value and returns a boolean, and a function that accepts a value of the type that
   * the first function accepts
   *
   * @typedef T generic type parameter
   * @param {(input: unknown) => input is T} accept - A function that indicate if the input is acceptable by the observer
   * @param {(input: T) => void} listener - A function handle the input for the observer if the input is accepted
   */
  constructor(accept: (input: unknown) => input is T, listener: (input: T) => void);
  /**
   * If the input is of the type that this handler is interested in, then call the listener function
   *
   * @param {unknown} input - unknown
   */
  notify(input: unknown): void;
}
