在Angular组件中,我有一个MatSelect
类型的子代,可以通过以下代码来获取它
@ViewChild('mySelect') mySelect: MatSelect;
我现在可以在代码中使用mySelect
来对选择中的更改做出反应,例如这样
this.mySelect.selectionChange
.pipe(
map(selChange => // here type inference finds that selChange is of type MatSelectChange
)
在这种情况下,类型推断工作正常。
我的问题是,如果我像下面的代码片段那样更改代码,则类型推断似乎不再起作用
of(null)
.pipe(
switchMap(() => this.mySelect.selectionChange),
map(selChange => // here type inference does not work and selChange is of type {}
)
关于为什么这种不同行为的任何建议?
答案 0 :(得分:0)
selectionChange 的类型不是 Observable 。 这是一个 EventEmitter
SwitchMap 返回可观察,因此您无法返回 EventEmitter
如果要绑定数据,可以使用简单的输出:
<mat-select (selectionChange)="doSomething($event)" />
或了解如何从 EventEmitter 创建可观察的:
const obs$ = Observable.create(observer => {
emitter.on('message', val => observer.next(val));
emitter.on('error', err => observer.error(err));
});
(参考:RxJS - Create Observable from an EventEmitter's multiple events)