Это хорошая практика - создавать собственные расширенные классы Observable? Я хочу реализовать свои собственные классы Single и Completable, чтобы знать количество или отсутствие данных, которые могут быть возвращены и наблюдаемые, и я хочу его как класс, потому что я использую reclect-metadata, и я использую design:returntype в своих декораторах, поэтому мне нужны классы, не псевдоним (поскольку при использовании псевдонима возвращаемый тип всегда будет Object, а не конструктором исходного класса).
Идея такова: для одиночных наблюдаемых используйте единственный оператор, а для завершенных наблюдаемых используйте операторы ignoreElements, но без класса в Typescript для одиночных игр я не знаю количество данных, только читая в коде Observable, этот наблюдаемый может возвращать один или много или нет, и я хочу сингл для конкретных случаев, это то, что я хочу:
// some methods in some class
loginUser(userName: string, password: string): Single<User>
saveUser(user: User): Completable
Для меня это более читабельно (потому что я использую RxJava 2 в своих проектах Android), и с этим я знаю, ожидаю или нет, без этого мне нужно сделать:
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
Знаешь, это плохо для моих глаз? поэтому я хочу создать эти классы для лучшего чтения моего кода и лучшей реализации.






Есть очень веские причины, по которым вы хотите быть более конкретными в отношении фактического поведения Observable. К сожалению, в RxJS нет встроенного механизма, чтобы указать это.
Расширение Observable, вероятно, будет очень сложным, если вы используете операторы, потому что они склеены вместе с помощью внутренних созданных Subject.
Достаточно ли вместо использования классов и API reflect-metadata во время выполнения использовать типы (интерфейсы)? Они могут помочь другим разработчикам документировать поведение Observable, а также использоваться для проверок во время компиляции (например, функция, которая принимает только тип Single).
Есть проект, который может служить отправной точкой для достижения этого: https://github.com/cartant/rxjs-traits
Он реализует проверку типов для нескольких операторов и вычисляет окончательный тип Observable на основе этих операторов. К сожалению, в настоящее время продолжение этого не представляется возможным.