/**
 * @callback listener
 * @param {*} data Any data could be passed to event listener
 */
export default class EventEmitter {
    events: any;
    /**
     * Add listener to event. No context provided, use Function.prototype.bind(), arrow function or closure instead.
     * @param  {string}   event    Event name
     * @param  {listener} listener Event listener
     * @return {Emitter}           Return self
     * @example
     *
     * function listener (data) {
     *  console.log(data)
     * }
     *
     * emitter.on('event', listener)
     */
    on(event: string, listener: (arg: unknown) => void): this;
    /**
     * Remove listener from event.
     * @param  {string}   event    Event name
     * @param  {listener} listener Event listener
     * @return {Emitter}           Return self
     * @example
     *
     * emitter.off('event', listener)
     */
    off(event: string, listener: (arg: unknown) => void): this;
    /**
     * Trigger an event. Multiple arguments not supported, use destructuring instead.
     * @param  {string}  event Event name
     * @param  {*}       data  Event data
     * @return {Emitter}       Return self
     * @example
     *
     * emitter.emit('event', { foo: 'bar' })
     */
    emit(event: string, data: any): this;
}
