typescript - No se puede usar redux-observable con Stencil@one: «No se puede invocar el constructor de la clase Observable sin 'new'» error en la clase ActionsObservable
Tengo una biblioteca de componentes Stencil que usa @Stencil/redux, redux, redux-observable y redux-actions. Todo funcionaba bien antes, pero estoy intentando actualizar a Stencil@One (1.0.0-beta.5).
Ahora tengo un error durante la creación del store de Redux. Esta es mi configuración del store:
import { Store, createStore, applyMiddleware } from 'redux';
import { createEpicMiddleware } from 'redux-observable';
import { rootEpic } from './epic';
const epicMiddleware = createEpicMiddleware();
export const ogodStore: Store<OgodState> = createStore(rootReducer, applyMiddleware(epicMiddleware));
epicMiddleware.run(rootEpic);
El error ocurre en la llamada a applyMiddleware y es el siguiente:
TypeError: Class constructor Observable cannot be invoked without 'new'
at new ActionsObservable (chunk-f18fe9c6.js:3744)
at epicMiddleware (chunk-f18fe9c6.js:3830)
at chunk-f18fe9c6.js:4579
at Array.map (<anonymous>)
at chunk-f18fe9c6.js:4578
at createStore (chunk-f18fe9c6.js:4043)
at chunk-f18fe9c6.js:4716
Estoy tan confundido a lo largo de los años por los diferentes tipos y objetivos de módulos de JavaScript... Pero esto es lo que sé:
- Este error es causado por este código específico dentro de redux-observable:
(ActionsObservable.__proto__ || Object.getPrototypeOf(ActionsObservable)).call(this)
- Está utilizando
call(this)para construir un objeto ActionsObservable, que depende de la claseObservablede rxjs - En mi configuración de Typescript uso lo que creó stencil y sigue siendo lo mismo para nuevos proyectos (module: 'esnext', target: 'es2017')
¿Observable de rxjs no admite esto? Es una clase que debería construirse usando la sintaxis ES6 new porque ahora es soportada por los navegadores?
Realmente me gustaría saber si debería crear un issue en el Github de redux-observable.
Respuesta #1
Se ha creado un problema ya que nadie respondió. Espero que tengamos noticias sobre ello pronto...
Respuesta #2
Resolví este problema siguiendo el enlace de GitHub proporcionado por @Elvynia -
Instalar redux-observable-es6-compat e importar -
import { createEpicMiddleware, combineEpics } from 'redux-observable-es6-compat';
en lugar de
import { createEpicMiddleware, combineEpics } from 'redux-observable';
