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 не использую
  • Вопрос задан
  • 2707 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
https://www.typescriptlang.org/play/?useDefineForC...

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

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

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