【发布时间】:2019-02-10 20:46:02
【问题描述】:
我刚刚创建了一个新的 Angular 应用程序,它安装了新的 RxJS v6.3(6 天前发布),它“修复”了管道和强类型的问题。
在 v6.2 中,我只能指定管道的最终返回值(在本例中为 .pipe<User>,如下所示:
getStatus(): Observable<User> {
return this.http.get('/user/status')
.pipe<User>(
tap(foo, bar),
finalize(() => this.requestEnded()),
map((resp) => new User(resp.user)));
}
但在新版本中,他们在 Observable 类中删除了这种可能性(他们将这一行从 v6.2.2 修复为 v6.3 中的这一行)。 IDE 抱怨此消息:
预计至少有 0 个参数,但得到了 1 个或更多。
现在我不得不为管道中的每个函数指定类型,如下所示:
getStatus(): Observable<User> {
return this.http.get('/user/status')
// If I have 3 piped functions I have to specify all 3 types
.pipe<{}, {}, User>(
tap(foo, bar),
finalize(() => this.requestEnded()),
// I even have to specify type for this parameter (resp)
map((resp: {user}) => new User(resp.user)));
}
这真的是故意的吗?请注意,这是对管道的“修复”,这对我来说意味着管道总是应该这样工作。还是我用错了?
我什至有这个很好用的函数,我只是传入了一些我想为每个请求执行的“公共管道”:
logIn(username: string, password: string, remember: boolean) {
return this.http.post('/user/login', { username, password, remember })
.pipe<User>(
...this.commonPipes(),
map(resp => new User(resp.user)));
}
但是现在,我应该如何为其指定类型?
这个更改是introduced in v6.3,它表示它“修复”了管道的一些错误(它引用了this issue)。我写“修复”是因为对我来说它破坏了一些东西,它不向后兼容,而且我还没有找到解释如何使用新的、已修复的 pipe() 的“如何升级”指南。
【问题讨论】:
-
看看回购中的 PR diff 和其他测试 - github.com/reactivex/rxjs/commit/872b0ec
-
哇,我刚刚注意到这个问题只有在我做
.pipe(...this.commonPipes())的奇怪事情时才会出现。对于我这个愚蠢的错误,这个问题太大太傻了。
标签: rxjs