RxJs6:OperatorFunction与MonoTypeOperatorFunction

问题描述 投票:2回答:2

我有以下代码:

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类是由我创建的,EventServiceEventsChainComponent都具有引用同一类的相同导入。

angular typescript rxjs6
2个回答
2
投票

对于遇到此问题的其他人:

我遇到过同样的问题。在我的情况下问题是与Event对象。

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

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

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

希望能帮助到你


1
投票

在下面的comment之后,我发现问题是我从相同的文件名导入了类,但我在src文件夹下的不同文件夹中有相同的文件。

MonoTypeOperatorFunction<T>不能分配给OperatorFunction<T,T>的唯一方法是类型参数 - Ts - 是不同的。说该函数在注释中返回Observable<FormEvent>并不是特别有用。 FormEvent活动来自哪里?它与您在该文件中使用的FormEvent相同吗?这是一堂课吗?谁知道?不是我。我的猜测是你有两个来自不同库的FormEvent类。或者同一个库的不同安装。

我做的是删除其中一个文件,错误消失。

© www.soinside.com 2019 - 2024. All rights reserved.