Создавайте классы для Single, Maybe и Completable в RxJS 6

Это хорошая практика - создавать собственные расширенные классы 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

Знаешь, это плохо для моих глаз? поэтому я хочу создать эти классы для лучшего чтения моего кода и лучшей реализации.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
5
0
588
1

Ответы 1

Есть очень веские причины, по которым вы хотите быть более конкретными в отношении фактического поведения Observable. К сожалению, в RxJS нет встроенного механизма, чтобы указать это.

Расширение Observable, вероятно, будет очень сложным, если вы используете операторы, потому что они склеены вместе с помощью внутренних созданных Subject.

Достаточно ли вместо использования классов и API reflect-metadata во время выполнения использовать типы (интерфейсы)? Они могут помочь другим разработчикам документировать поведение Observable, а также использоваться для проверок во время компиляции (например, функция, которая принимает только тип Single).

Есть проект, который может служить отправной точкой для достижения этого: https://github.com/cartant/rxjs-traits

Он реализует проверку типов для нескольких операторов и вычисляет окончательный тип Observable на основе этих операторов. К сожалению, в настоящее время продолжение этого не представляется возможным.

Другие вопросы по теме