Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

354
Visualizações
¿Cómo puedo conservar genéricos en un componente React de orden superior?

Digamos que quiero usar el patrón de componente de orden superior React para transformar un subconjunto de mis accesorios antes de que lleguen a mi componente:

 type UpstreamProps<X> = { foo?: number bar?: string baz: X } type DownstreamProps<X> = { foo: number bar: string baz: X bix: string } function transform<X>(props: UpstreamProps<X>): DownstreamProps<X> { return { ...props, foo: props.foo || 0, bar: props.bar || '(unknown)', bix: `${props.foo}-${props.bar}-bix` } }

En la definición del widget, quiero usar accesorios posteriores (estrictos):

 function Parent<X>(props: DownstreamProps<X> & {formatter: (x: X) => string}) { return ( <> foo = {props.foo} bar = {props.bar} baz = {props.formatter(props.baz)} bix = {props.bix} </> ) }

En el sitio de la llamada, debería poder pasar accesorios ascendentes (opcionales):

 <WrappedParent<number> baz={22} formatter={(x: number) => `my number squared is ${Math.pow(x, 2)}`} />

Esto es lo más cerca que he llegado a escribir el componente de orden superior, pero no puedo hacer que funcione bien con los genéricos en Parent / WrappedParent :

 function withUpstreamProps<X, OtherProps>( WrappedComponent: React.ComponentType<DownstreamProps<X> & OtherProps> ) { return function({foo, bar, baz, ...otherProps}: UpstreamProps<X> & OtherProps) { return ( <WrappedComponent {...otherProps} {...transform({foo, bar, baz})} /> ) } } export default withUpstreamProps(Parent) // doesn't keep generics

Aquí hay dos requisitos que son difíciles de conciliar:

  1. withUpstreamProps(someRandomComponent) debería ser un error. withUpstreamProps solo debe aceptar un componente válido como argumento; es decir, uno que acepta un superconjunto de DownstreamProps<X> .
  2. El WrappedParent emitido debe ser parametrizado por un parámetro genérico; por ejemplo WrappedParent<number> .

¿Cómo puedo escribir y/o usar mi contenedor de componentes de orden superior para cumplir con estos requisitos?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

¿Funcionaría algo así para tu caso?:

 type Wrapped<X, Other> = React.ComponentType<Output<X> & Other> function withUpstreamProps<C extends Wrapped<any, any>>( WrappedComponent: C ) { return function<X, OtherProps>({foo, bar, baz, ...otherProps}: Input<X> & OtherProps) { return ( <WrappedComponent {...otherProps} {...transform({foo, bar, baz})} /> ) } }
about 4 years ago · Juan Pablo Isaza Relatório

0

Si desea pasar el tipo genérico al componente resultante, la función devuelta por el HOC debe ser genérica y tomar el tipo X como argumento y luego pasarlo a WrappedComponent .

 function withUpstreamProps( WrappedComponent: React.FunctionalComponent ) { return function <X, OtherProps>({ foo, bar, baz, ...otherProps }: UpstreamProps<X> & OtherProps) { return ( <WrappedComponent<X> {...otherProps} {...transform({ foo, bar, baz })} /> ); }; }

También se debe pasar el tipo OtherProps , de modo que WrappedParent reconozca la función del formatter .

También debe asignar un tipo para la función de formatter cuando use el componente resultante ( WrappedParent )

Si mi respuesta fue útil, se agradecería un voto a favor.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda