类型推断不适用于Angular Material的MatSelect

时间:2019-03-10 11:49:20

标签: angular typescript angular-material type-inference

在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 {}
)

关于为什么这种不同行为的任何建议?

1 个答案:

答案 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