Задать вопрос
Demonov
@Demonov
Frontend developer

TypeScript. Как типизировать callback?

Я только начинаю осваивать 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 не использую
  • Вопрос задан
  • 2892 просмотра
Подписаться 1 Средний 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Skillbox
    Frontend-разработчик
    9 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
https://www.typescriptlang.org/play/?useDefineForC...

еще можно для subscriber сделать условный тип, но все равно придется реализовывать ветвление, так что лучше уж оверлоадом, нагляднее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы