Ric*_*cha 5 typescript angular rxjs6
我有以下代码:
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) => {
..........
});
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,编译器返回以下错误:
“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>;
Run Code Online (Sandbox Code Playgroud)
如您所见,过滤器作为 2 个重载方法,一个返回OperatorFunction,另一个MonoTypeOperatorFunction.
谁能告诉我这两种类型之间的区别?任何人都知道我该如何解决这个错误?
注:该FormEvent班是由我创造,都EventService与EventsChainComponent具有相同的进口是参照同一类。
对于其他遇到此问题的人:
我遇到过同样的问题。就我而言,问题出在 Event 对象上。
rxjs 和 angular/router 都有一个事件对象,因此存在名称冲突。我为解决这个问题所做的就是使用不同的名称声明 @angular/router 事件,然后相应地使用。
{Event as RouterEvent} from '@angular/router';
Run Code Online (Sandbox Code Playgroud)
所以在那之后:Event当我想使用 rxjs.Event 和RouterEvent当我想使用 @angular/router.Event 时,我会使用它。并且错误消失了:)
希望能帮助到你
在下面的评论之后,我发现问题是我从相同的文件名导入了类,但我在 src 文件夹下的不同文件夹中有相同的文件。
MonoTypeOperatorFunction<T>a不可分配给 an 的唯一方法OperatorFunction<T,T>是类型参数 - theTs- 不同。在注释中说函数返回Observable<FormEvent>并不是特别有用。FormEvent事件从何而来?它与您在该文件中使用的 FormEvent 相同吗?是一个班级吗?谁知道?不是我。我的猜测是您有两个来自不同库的 FormEvent 类。或者同一库的不同安装。
我所做的就是删除其中一个文件,错误就消失了。
| 归档时间: |
|
| 查看次数: |
7563 次 |
| 最近记录: |