angular - RxJs6:OperatorFunction 与 MonoTypeOperatorFunction
问题描述
我有以下代码:
export class EventsChainComponent {
eventSubscriber:Subscription;
constructor (protected eventService: EventService) {}
public registerComponentsEvent(event:any) {
// getOnEvent signature
// (method) EventService.getOnEvent(): Observable<FormEvent>
this.eventSubscriber = this.eventService.getOnEvent()
.pipe(filter((formEvent: FormEvent) => {return formEvent.key == event.event}))
.subscribe((formEvent: FormEvent) => {
..........
});
}
当我编译时,编译器返回以下错误:
“MonoTypeOperatorFunction”类型的参数不能分配给“OperatorFunction”类型的参数。
所以,我搜索了一下,我找到了RxJs6
操作符过滤 API:
export declare function filter<T, S extends T>(predicate: (value: T, index: number) => value is S, thisArg?: any): OperatorFunction<T, S>;
export declare function filter<T>(predicate: (value: T, index: number) => boolean, thisArg?: any): MonoTypeOperatorFunction<T>;
如您所见,过滤器作为 2 个重载方法,一个返回OperatorFunction
,另一个MonoTypeOperatorFunction
。
谁能告诉我这两种类型的区别?任何人都知道我该如何解决这个错误?
注意:FormEvent
该类是由我创建的,并且两者都EventService
具有EventsChainComponent
相同的导入,即引用同一类。
解决方案
对于其他有这个问题的人:
我遇到过同样的问题。就我而言,问题出在 Event 对象上。
rxjs 和 angular/router 都有一个事件对象,因此存在名称冲突。我为解决这个问题所做的就是用不同的名称声明 @angular/router 事件,然后相应地使用。
{Event as RouterEvent} from '@angular/router';
所以在那之后:Event
当我想使用 rxjs.Event 以及RouterEvent
当我想使用 @angular/router.Event 时,我会使用它。错误消失了:)
希望能帮助到你
推荐阅读
- javascript - 如何为网页中的特定部分创建不同的用户权限
- javascript - 如何使用等待地图(反应)
- python - 情节表达添加文字
- kotlin - 如何在终端中从用户那里获取字符?
- java - 在 jpa 中保存具有一对多关系的实体会出现以下错误
- shell - Informatica Pre Session 命令读取目录中匹配模式的文件并删除文件中的“”
- asp.net-core - 如何在计时器回调或触发我的任务的方法中获得正确的 IMemoryCache 实例?
- javascript - 从 HTML 表单数据创建 JS 对象失败
- c# - WPF 全局热键未注册
- sql - 为我定义的函数创建触发器时,Postgres SQL 中的语法错误?