Обработчики ошибок выкинь. Только off что-то возвращает непонятно зачем. else if задействуй. Твой эмиттер поддерживает только один вызов on на эвент. Следующий on затирает предыдущий массив. По условию он не должен формировать массив через спред, а добавлять по одному коллбеку. Map избыточен, eventName всегда string. Проверки у off на callback нет, сносит всё.
Т. Е. сделать объект, который имеет только ключ: функция?