Typescript не может правильно определить тип T из параметра EventEmitter в операторе RxJS (приложение Angular)

#javascript #angular #typescript #rxjs

Вопрос:

Тип сортировки, не распознанный в результирующем наблюдаемом

При использовании combineLatest оператора со свойством sortChange, которое имеет тип EventEmitter<Sort> , и изменением страницы, которое имеет тип Subject<number> , в результирующем наблюдаемом Sort тип не распознается и выводится как unknow (изображение выше).

При использовании небольшого взлома с отображением this.sort.sortChange.pipe(map(sort => sort)) значение EventEmitter<Sort> выводится правильно, как Sort (изображение ниже).

Тип сортировки выведен правильно

Мне кажется, что EventEmitter это создает проблемы, и TypeScript не может определить тип, который он будет выдавать.

Не могли бы вы объяснить, пожалуйста, что происходит и есть ли способ получить правильный тип без обходных путей?

Комментарии:

1. Если возможно, не включайте код в виде изображений.

2. Мне пришлось добавить изображения, чтобы получить информацию о параметрах и предполагаемых типах для combineLatest оператора. Это появляется только в коде VS, когда вы наводите курсор мыши на оператора…

3. Никогда не замечал этого сам, вероятно, потому, что я всегда использую asObservable() по привычке. Я предполагаю, что это может быть связано с тем, как написаны типографы, и с тем фактом, что у EventEmitter есть собственная перегрузка для метода подписки, который не соответствует наблюдаемому шаблону<T>. Использование asObservable позволит правильно вывести тип, как он будет выводиться из наблюдаемой и предметной реализации (как бы глупо это ни звучало, это работает).

4. Нужен воспроизводимый код, так как он хорошо работает для меня.

5. спасибо за проверку, создам стекблитц и опубликую здесь