Импорт из ‘rxjs’ с ‘rxjs-compat’, присутствующим в качестве дополнительной зависимости, не создает совместимых наблюдаемых

#rxjs #rxjs-compat

#rxjs #rxjs-compat

Вопрос:

Формулировка инструкций по миграции rxjs 5-6, а также сообщений в блогах, подобных этому, подразумевают, что просто наличие ‘rxjs-compat’ в качестве зависимости нашего проекта наряду с ‘rxjs’, Тогда Наблюдаемые, объекты и т.д., импортированные из ‘rxjs’, Будут совместимы с устаревшими операторами. например. Observable.of(3, 4, 5).concatMap(num => {/*...*/}) . Однако, похоже, для нас это не так. Все работает примерно так, как ожидалось, если мы импортируем напрямую из ‘rxjs-compat’, который, похоже, не является предполагаемым путем миграции, а также неудобен тем, что объявления TypeScript для ‘rxjs’ более полные, и наличие импорта как для ‘rxjs’, так и для ‘rxjs-compat’ в одном файле в будущем будет слегка раздражать необходимость очистки. Есть ли дополнительный шаг, или следует ожидать импорта из ‘rxjs-compat’?

Ответ №1:

Просто реорганизуйте свой код и не используйте уровень совместимости.

 Observable.of(3, 4, 5).concatMap(num => {/*...*/})
  

становится

 of(3, 4, 5).pipe(concatMap(num => {/*...*/}))
  

Вам будет намного лучше выполнить рефакторинг заранее.

Комментарии:

1. К сожалению, кодовая база довольно большая, и привлекательность rxjs-compat заключается в том, что она обеспечивает постепенную миграцию, а не требует, чтобы мы меняли все сразу.

2. Я подумал то же самое, когда мы обновили Angular 5 до 6. Я собирался использовать уровень compat, но мой ведущий разработчик сказал мне не делать этого. Я рад, что мы сделали это таким образом сейчас. Компилятор сказал мне, где были все вещи, которые нужно было исправить, и это было сделано за полдня. Я думаю, что усилия того стоили.