我有以下代码:
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:
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类是由我创建的,EventService和EventsChainComponent都具有引用同一个类的相同导入。
发布于 2018-10-03 08:57:34
在下面的comment之后,我发现问题在于我从同一个文件名导入了类,但是在src文件夹下的另一个文件夹中有相同的文件。
MonoTypeOperatorFunction<T>不能分配给OperatorFunction<T,T>的唯一方法是,类型参数--Ts--是不同的。说函数在注释中返回Observable<FormEvent>并不特别有用。FormEvent事件从何而来?它与您在该文件中使用的FormEvent相同吗?是上课吗?谁知道呢?不是我。我猜您有两个来自不同库的FormEvent类。或同一库的不同安装。
我所做的是删除其中一个文件和错误消失。
发布于 2019-02-26 13:01:23
对于其他有此问题的人来说:
我也有过同样的问题。在我的例子中,问题在于事件对象。
rxjs和角/路由器都有一个事件对象,因此出现了名称冲突。为了解决这个问题,我所做的就是用不同的名称声明@转角/路由器事件,然后相应地使用。
{Event as RouterEvent} from '@angular/router';在那之后:当我想使用Event /router.Event时,我使用rxjs.Event和RouterEvent。错误就消失了:)
希望它能帮上忙
发布于 2021-02-01 09:41:19
上述的解决方案对我不管用..。我发现了这个
filter((event): event is ActivationEnd => event instanceof ActivationEnd)给https://gitmemory.com/issue/ReactiveX/rxjs/4947/518146427的学分
https://stackoverflow.com/questions/52594026
复制相似问题