我有以下代码:
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';
所以在那之后:当我想使用@ angular / router.Event时,我想使用rxjs.Event和Event
时使用RouterEvent
。错误消失了:)
希望能帮助到你
在下面的comment之后,我发现问题是我从相同的文件名导入了类,但我在src文件夹下的不同文件夹中有相同的文件。
MonoTypeOperatorFunction<T>
不能分配给OperatorFunction<T,T>
的唯一方法是类型参数 -Ts
- 是不同的。说该函数在注释中返回Observable<FormEvent>
并不是特别有用。 FormEvent活动来自哪里?它与您在该文件中使用的FormEvent相同吗?这是一堂课吗?谁知道?不是我。我的猜测是你有两个来自不同库的FormEvent类。或者同一个库的不同安装。
我做的是删除其中一个文件,错误消失。