首页 > 解决方案 > 类型推断并不总是适用于 Angular Material 的 MatSelect

问题描述

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

关于为什么这种不同的行为有什么建议吗?

标签: angulartypescriptangular-materialtype-inference

解决方案


selectionChange不是Observable类型。它是一个事件发射器

SwitchMap返回Observable,所以你不能返回EventEmitter

如果你想绑定数据,你可以使用一个简单的输出:

<mat-select (selectionChange)="doSomething($event)" />

或者查看如何从EventEmitter创建Observable

const obs$ = Observable.create(observer => {
  emitter.on('message', val => observer.next(val));
  emitter.on('error', err => observer.error(err));
});

(参考:RxJS - 从 EventEmitter 的多个事件中创建 Observable


推荐阅读