首页 > 解决方案 > 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相同的导入,即引用同一类。

标签: angulartypescriptrxjs6

解决方案


对于其他有这个问题的人:

我遇到过同样的问题。就我而言,问题出在 Event 对象上。

rxjs 和 angular/router 都有一个事件对象,因此存在名称冲突。我为解决这个问题所做的就是用不同的名称声明 @angular/router 事件,然后相应地使用。

{Event as RouterEvent} from '@angular/router';

所以在那之后:Event当我想使用 rxjs.Event 以及RouterEvent当我想使用 @angular/router.Event 时,我会使用它。错误消失了:)

希望能帮助到你


推荐阅读