При разработке на JavaScript я столкнулся с трудностью в определении аргументов, передаваемых между функциями. Поэтому я решил создать простой объект для описания события и его параметров.
var GreetingEvent = {
GREETING: 'greeting',
'params': {
username: null
}
}
// отправка события
this.triggerEvent(new CustomEvent(GreetingEvent.GREETING, "имя_пользователя"));
// подписка на событие
this.onEvent(GreetingEvent.GREETING, this.handleGreeting);
Главный вопрос заключается в том, что моим коллегам нужно изучать код или использовать console.log для выяснения, какие параметры передаются в их обработчики. Кто-нибудь имел аналогичные проблемы? Как вы их решали?
Почему бы не валидировать прямо в обработчиках событий? Я делаю простую проверку if (!event.username) throw new Error('username required') — сразу видно что передавать. Можно еще дефолты добавить через деструктуризацию {username = 'anonymous'} = event. Не будет ли это избыточно для твоих задач?
Сталкивался с этим. Мы делаем enum’ы для всех кастомных событий в отдельном модуле, в комментах описываем структуру данных. Договорились именовать события через константы вроде EVENT_USER_LOGIN. Еще можно создать фабрику событий с методами EventFactory.createGreeting(username) — сразу видно что передавать. Документацию никто не читает, лучше когда код говорит сам за себя.
У нас была похожая ситуация в команде пару лет назад. Мы начали использовать JSDoc для описания структуры событий – это действительно помогло. Просто добавьте комменты к функциям с тем, что они принимают, и какие поля ожидает объект. Можно также создать отдельный файл с константами для событий и описать всё в комментариях там. TypeScript идеально решает эту проблему с интерфейсами, но понимаю, что не всегда можно его подключить к проекту.