我试图了解反应式编程和可观察性,但当然没有成功.我有以下代码:
this.searchSubscription = this.filtersSubject
.takeLast(2)
.reduce((acc, cur) => {
console.log(acc);
acc.push(cur);
return acc;
}, [])
.debounceTime(1000)
.subscribe(x => this.emitFilters());
Run Code Online (Sandbox Code Playgroud)
我想使用takeLast(2)管道,reduce所以我可以把它变成两个值的数组,并且过滤器是两者之间的某些值是不同的.我一直在浏览文档reduce,甚至传递种子,但VS Code告诉我,Property 'push' does not exist on type 'Object'.但是console.log节目acc是一个数组.我对正在发生的事情以及如何解决这个问题感到困惑.当然,我可能完全错误地解决了这个问题,这使得可观察的内容难以理解.
您的代码是正确的,但rxjs5中存在一个错误,它阻止了类型检查.
查看reduce的源代码,我们看到以下签名
export function reduce<T>(this: Observable<T>, accumulator: (acc: T, value: T, index: number) => T, seed?: T): Observable<T>;
export function reduce<T>(this: Observable<T>, accumulator: (acc: T[], value: T, index: number) => T[], seed?: T[]): Observable<T[]>;
export function reduce<T, R>(this: Observable<T>, accumulator: (acc: R, value: T, index: number) => R, seed?: R): Observable<R>;
Run Code Online (Sandbox Code Playgroud)
在TypeScript中编写重载时,有必要针对它们的类型(包括类型参数)从最大到最小的特性进行排序.这是因为TypeScript选择了第一个匹配的重载.在这种情况下,重载集中的最后一个声明实际上需要指定为第一个.
由于这个问题,我创建了https://github.com/ReactiveX/rxjs/issues/2339.
| 归档时间: |
|
| 查看次数: |
822 次 |
| 最近记录: |