Я только начинаю осваивать TS и сейчас столкнулся с непониманием типизации.
Для примера возьмём простой Observer.
TS observer
Все очень просто, в классе есть объект observers в котором по ключу события хранится массив callback`ов.
Метод attach подписывает callback на событие.
detach отписывает.
Метод notify, по имени события пробегается по массиву и вызывает всех подписчиков, передавая им аргументы.
Как сохранить тип аргументов передаваемых в callback?
Да и вообще как правильно это типизировать?
Допустим в наследующем классе я навешу обработчик,
this.attach('input', (value: string) => {
console.log(value.toUpperCase())
});
value должна быть строкой, но как указать какие будут типы у параметры callback в Observer, ведь в другом классе я могу навешать другой обработчик с другими параметрами.
Такая же проблема при оповещении. т.е. при вызове метода notify
Мне бы хотелось чтобы, при заполнении аргумента event в notify, TS подсказывал мне какие параметры можно передать. Или какие event доступны.
this.notify('input', 'Hello World!');
Такое вообще возможно?
Я посмотрел как в typescript типизировали функцию bind, и понял что простого решения нет:D
Я сделал так же c attach, но это не решило проблему с notify
any не использую