const events = new Map();

class EventBus {
	/**
	 * Register an event handler for the given type.
	 *
	 * @param  {String} type    Type of event to listen for.
	 * @param  {Function} handler Function to call in response to given event.
	 */
	on(type, handler) {
		if (events.has(type)) {
			events.get(type).push(handler);
		} else {
			events.set(type, [handler]);
		}
	}

	/**
	 * Remove an event handler for the given type.
	 *
	 * @param  {String} type    Type of event to unregister `handler` from.
	 * @param  {Function} handler Handler function to remove.
	 */
	off(type, handler) {
		if (events.has(type)) {
			events.set(
				type,
				events.get(type).filter((item) => item !== handler)
			);
		}
	}

	/**
	 * Invoke all handlers for the given type.
	 *
	 * @param {String} type  The event type to invoke.
	 * @param {Any} [evt]  Any value (object is recommended and powerful), passed to each handler.
	 */
	emit(type, evt) {
		if (events.has(type)) {
			events
				.get(type)
				.slice()
				.map((handler) => {
					handler(evt);
				});
		}
	}
}

export default new EventBus();

@@ -923,16 +923,19 @@
 t(type, 
+...
 evt) %7B%0A%09
@@ -1034,16 +1034,19 @@
 handler(
+...
 evt);%0A%09%09

Support multiple arguments in eventbus emit