gpt4 book ai didi

angular - RxJS 将日志缩减为数组,但将错误缩减为对象

转载 作者:太空狗 更新时间:2023-10-29 18:13:49 25 4
gpt4 key购买 nike

我正在努力了解响应式编程和可观察对象,当然没有成功。我有以下代码:

this.searchSubscription = this.filtersSubject
.takeLast(2)
.reduce((acc, cur) => {
console.log(acc);
acc.push(cur);
return acc;
}, [])
.debounceTime(1000)
.subscribe(x => this.emitFilters());

我想使用 takeLast(2) 管道传输到 reduce 所以我可以把它变成一个包含两个值的数组,并且过滤器是两个值之间的特定值不同的。我一直在查看 reduce 的文档,甚至传递了一个种子,但 VS Code 告诉我 Property 'push' does not exist on type 'Object'. 但是console.log 显示 acc 是一个数组。我对发生了什么以及如何解决它感到困惑。当然,我可能完全错误地解决了这个问题,这使得 observables 难以理解。

最佳答案

您的代码是正确的,但 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>;

在 TypeScript 中编写重载时,有必要根据它们的类型(包括它们的类型参数)从高到低对它们进行排序。这是因为 TypeScript 会选择第一个匹配的重载。在这种情况下,实际上需要将重载集中的最后一个声明指定为第一个。

我创建了 https://github.com/ReactiveX/rxjs/issues/2339因为这个问题。

关于angular - RxJS 将日志缩减为数组,但将错误缩减为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com