angular - 类型推断并不总是适用于 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 {}
)
关于为什么这种不同的行为有什么建议吗?
解决方案
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));
});
推荐阅读
- java - 带有 Angular 的 Spring Boot。从源“http://localhost:4200”访问“http://localhost:8080/”的 XMLHttpRequest 已被 CORS 策略阻止
- python - xlsxwriter 格式特定单元格
- python - 如何绘制具有不同 colspans 的四个子图?
- r - 如何在ggplot函数中使用以数字开头的列名
- ruby-on-rails - RoR 回调 after_create
- javascript - 为什么有些滑块会发出红光?
- ios - 如何执行激活程序约束
- sql - 下面的 select 语句需要很长时间才能运行
- java - 如何创建 LayoutInflator?
- angular - 用 Typescript 中另一个 observable 的结果填充 observable 中的字段