5

创建自己的 Observable 扩展类是一个好习惯吗?我想实现我自己的 Single 和 Completable 类,以便知道数据的数量或不存在,并且 observable 可以返回,我希望它作为一个类,因为我使用reclect-metadata并且我design:returntype在我的装饰器中使用,所以我需要一个类而不是别名(因为使用别名返回的类型将始终是 Object 而不是原始类构造函数)。

想法是:对于 Single observables 使用单个运算符,对于 Completable observables 使用 ignoreElements 运算符,但在 Typescript for Singles 中没有类我不知道数据量仅通过读取代码 Observable,observable 可以返回一个或很多或没有,我想要一个针对特定情况的单曲,这就是我想要的:

// some methods in some class
loginUser(userName: string, password: string): Single<User>
saveUser(user: User): Completable

对我来说,这更具可读性(因为我在我的 Android 项目中使用 RxJava 2)并且我知道期望与否,没有我需要做的:

loginUser(userName: string, password: string): Observable<User> // if i chain this with other observables i don't know how much users this will return
saveUser(user: User): Observable<void> // simply ugly

这对我的眼睛不好,你知道吗?所以我想创建这些类以便更好地阅读我的代码和更好的实现。

4

1 回答 1

1

您有充分的理由希望更具体地了解 Observable 的实际行为。不幸的是,RxJS 中没有内置机制来指定这一点。

如果您使用运算符,扩展 Observable 可能会非常困难,因为它们是使用内部创建的主题粘合在一起的。

代替reflect-metadata在运行时使用类和 API,使用类型(接口)就足够了吗?这些可以帮助向其他开发人员记录 Observable 的行为,也可以用于编译时检查(例如,只接受 type 的函数Single)。

有一个项目可以作为如何实现这一点的起点:https ://github.com/cartant/rxjs-traits

它实现了一些运算符的类型检查,并根据这些运算符计算 Observable 的最终类型。不幸的是,它目前似乎没有继续下去。

于 2021-05-09T22:11:41.663 回答