#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. спасибо за проверку, создам стекблитц и опубликую здесь