【发布时间】:2021-02-01 17:41:19
【问题描述】:
我有以下代码:
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 具有相同的导入,引用同一个类。
【问题讨论】:
-
你在输入
eventSubscriber吗? -
MonoTypeOperatorFunction<T>等价于OperatorFunction<T,T>。 -
@Phix 我更改了问题,以便您了解有关我的代码的更多信息。
-
@cartant 如果它是等价的,为什么编译器会给出这样的错误?
-
它应该是可分配的,但您的问题中没有足够的信息来提供理由。您需要显示源 observable 的类型。如果您在传递给
filter的箭头函数中明确说明了要键入的不同类型,则它必须是。
标签: angular typescript rxjs6