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

154
Vistas
El argumento de la función es cualquiera de los 3 tipos que comparten 1 propiedad en común, pero sus otras propiedades varían según el tipo. Surgen problemas

Tengo la siguiente función que toma cualquiera de los 3 tipos que comparten 1 propiedad en común, pero sus otras propiedades varían:

 private async processPredicates( routing: ActivityRouting[] | ActivityStepOptionsOverride[] | ActivityStepContentSource[] ) { for (const { predicate, ...block } of routing) { if (predicate == null) return block; else if (await this.callMethod(PREDICATES, predicate)) return block; } return null; }

La propiedad que comparten los 3 tipos se llama predicate

 export type ActivityRouting = { predicate?: string[]; sideEffects?: SideEffect[]; next?: Next; }; export type ActivityStepOptionsOverride = { mode?: string; predicate?: string[]; }; export type ActivityStepContentSource = { reduce?: string; use?: string; predicate?: string[]; };

Ahora, aquí está mi problema: después de agregar el segundo y tercer tipo a processPredicates, la siguiente función comenzó a darme 2 errores:

 private async resolveRouting({ routing, step, options, defaultNext, }: { routing?: ActivityRouting[]; step: ActivityStep; options: ActivityStepOptions; defaultNext: Next; }) { await StepEvaluationContext.evaluate({ controller: this, step, options }, async () => { const leftoverRouting = routing && (await this.processPredicates(routing)); if (leftoverRouting && leftoverRouting.sideEffects) { await Promise.all( leftoverRouting.sideEffects.map( async (sideEffect) => await this.callMethod(SIDE_EFFECTS, sideEffect) ) ); } await this.callMethod(STEP_RESOLVERS, leftoverRouting?.next ?? defaultNext); }); }

Los errores son:

 Property 'sideEffects' does not exist on type '{ sideEffects?: SideEffect[] | undefined; next?: Next | undefined; } | { reduce?: string | undefined; use?: string | undefined; } | { mode?: string | undefined; }'. Property 'sideEffects' does not exist on type '{ reduce?: string | undefined; use?: string | undefined; }'.ts(2339)

Y

 Property 'next' does not exist on type '{ sideEffects?: SideEffect[] | undefined; next?: Next | undefined; } | { reduce?: string | undefined; use?: string | undefined; } | { mode?: string | undefined; }'. Property 'next' does not exist on type '{ reduce?: string | undefined; use?: string | undefined; }'.ts(2339)

Me imagino que el error proviene del hecho de que la función resolveRouting no sabe cuál de los 3 tipos leftoverRouting , por lo que simplemente me dice que la propiedad no existe. Sin embargo, no estoy muy seguro de cómo manejar ese problema.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema es que el tipo de retorno de la función processPredicates tiene la unión de los 3 tipos. No es posible acceder a leftoverRouting.sideEffects sin un tipo que lo restrinja .

Para resolverlo, haga que processPredicates sea una función genérica que devuelva el tipo que se llama en su lugar. Sería el siguiente:

 interface Activity { predicate?: string[]; } export interface ActivityRouting extends Activity { sideEffects?: string[]; next?: string; }; export interface ActivityStepOptionsOverride extends Activity { mode?: string; }; export interface ActivityStepContentSource extends Activity { reduce?: string; use?: string; };
 async function processPredicates<T extends Activity>( routing: T[] ): Promise<Omit<T, 'predicate'> | null> { for (const { predicate, ...block } of routing) { if (predicate == null) return block; else if (await this.callMethod(PREDICATES, predicate)) return block; } return null; }
about 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