Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
concatLatestFrom con múltiples selectores ngrx

Estoy tratando de obtener 2 selectores con el último concatLatestFrom que se introdujo en NgRx 12, sin embargo, parece que no puedo entender lo que estoy haciendo mal y no puedo lograrlo.

Tengo un efecto que se ve así

 loadAllCases$ = createEffect(() => this._actions$.pipe( concatLatestFrom(() => [ this.store.pipe(select(CaseSelectors.getAllCases)), this.store.pipe(select(CaseSelectors.getCasesLoaded)) ]), navigation(this.caseLandingPage, { run: (snap, [loaded, cases]) => { if (loaded) { return CaseActions.loadAllSuccess(); } else { return this._caseService.getAll().pipe( map(cases => CaseActions.loadAllSuccess(cases)) ); } }, onError: (action, error) => { return CaseActions.loadAllFailed(error); } }) ));

Sin embargo, esto no parece funcionar debido a la incompatibilidad de tipos.

 Argument of type 'OperatorFunction<Action, [Action, boolean, Case[]]>' is not assignable to parameter of type 'OperatorFunction<Action, ActionOrActionWithState<unknown, Action>>'. Type '[Action, boolean, Case[]]' is not assignable to type 'ActionOrActionWithState<unknown, Action>'. Type '[Action, boolean, Case[]]' is not assignable to type '[Action, unknown]'.      Source has 3 element(s) but target allows only 2

Sin embargo. si solo dejo un selector, esto funciona bien, ¿es este un caso en el que usar concatLatestFrom solo puede seleccionar un selector? Tenga en cuenta que he intentado encadenarlos uno tras otro, esto produce el mismo error. Cualquier ayuda o consejo apreciado.

Actualizar

Este parece ser un error específico de Nx, y la tubería de navegación que proporciona, he abierto un problema relacionado con un error con el Repositorio de Nx https://github.com/nrwl/nx/issues/6830

El código del ejemplo funciona bien si se canaliza con cualquier operación de RxJs.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Hay una declaración de tipo para la función concatLatestFrom y su versión sobrecargada

 import { Observable, ObservedValueOf, OperatorFunction } from 'rxjs'; export declare function concatLatestFrom<T extends Observable<unknown>[], V>(observablesFactory: (value: V) => [...T]): OperatorFunction<V, [V, ...{ [i in keyof T]: ObservedValueOf<T[i]>; }]>; export declare function concatLatestFrom<T extends Observable<unknown>, V>(observableFactory: (value: V) => T): OperatorFunction<V, [V, ObservedValueOf<T>]>;

https://github.com/ngrx/platform/blob/12.4.0/modules/effects/src/concat_latest_from.ts

Entonces tiene razón, esta función acepta un solo observable o una matriz de observables.

Pero parece que estás usando el orden de los operadores de forma incorrecta.

No estoy seguro de qué significan navegación y caseLandingPage , pero este ejemplo podría darle una idea de cómo arreglar/mejorar su controlador de efectos

 public readonly something$ = createEffect( () => this.actions$.pipe( ofType(someAction), concatLatestFrom(() => [ this.store.select(selectFoo), this.store.select(selectBar), ]), switchMap(([action, foo, bar]) => { // Do what you need }), ), );
over 4 years ago · Santiago Trujillo Denunciar

0

Hmmmm, los tipos aceptan una serie de selectores y también hay una prueba para verificar que funciona.

¿Tienes una reproducción ejecutable? Probablemente el problema sea otro.

El error en sí menciona los tipos correctos devueltos por concatLatestFrom , por lo que supongo que el operador de navigate debe modificarse.

 Type '[Action, boolean, Case[]]' is not assignable ...
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda