首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJs6: OperatorFunction对MonoTypeOperatorFunction

RxJs6: OperatorFunction对MonoTypeOperatorFunction
EN

Stack Overflow用户
提问于 2018-10-01 15:09:18
回答 3查看 10.5K关注 0票数 8

我有以下代码:

代码语言:javascript
复制
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操作符filter:

代码语言:javascript
复制
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>;

如您所见,过滤器作为两个重载方法,一个返回OperatorFunction,另一个重载MonoTypeOperatorFunction

有人能告诉我这两种类型的区别吗?谁知道我怎么解决这个错误?

注意:FormEvent类是由我创建的,EventServiceEventsChainComponent都具有引用同一个类的相同导入。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-03 08:57:34

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-02-26 13:01:23

对于其他有此问题的人来说:

我也有过同样的问题。在我的例子中,问题在于事件对象。

rxjs和角/路由器都有一个事件对象,因此出现了名称冲突。为了解决这个问题,我所做的就是用不同的名称声明@转角/路由器事件,然后相应地使用。

代码语言:javascript
复制
{Event as RouterEvent} from '@angular/router';

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

希望它能帮上忙

票数 5
EN

Stack Overflow用户

发布于 2021-02-01 09:41:19

上述的解决方案对我不管用..。我发现了这个

代码语言:javascript
复制
filter((event): event is ActivationEnd => event instanceof ActivationEnd)

https://gitmemory.com/issue/ReactiveX/rxjs/4947/518146427的学分

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52594026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档