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

232
Vistas
¿Cómo usar este tipo u otro basado solo en accesorios? Reaccionar uniones discriminatorias mecanografiadas

tengo un componente:

 type Base = { color: string } type Button = { to: string } & Base type Link = { link: string linkNewTab: boolean } & Base type ComponentProps = Button | Link export const Button: React.FC<ComponentProps> = (props) => { return (<> {props.link ? <Link newTab={props.linkNewTab}>...</Link> : props.to && <Button>...</Button>} </>) }
  • Hay un tipo base con accesorios que ambos tipos tienen en común.
  • El componente debe tener un tipo de botón o enlace según los accesorios proporcionados. Pero si tiene Link, se prefieren estos accesorios.

Error de mecanografiado:

 Property 'link' does not exist on type 'PropsWithChildren<ComponentProps>'. Property 'link' does not exist on type '{ to: string; } & Base & { children?: ReactNode; }'.ts(2339)

Lo que no quiero:

  • Puedo resolver el problema agregando un tipo al tipo Base y decidir a partir de ellos qué accesorios están permitidos. Me gustaría decidir eso automáticamente en función de los accesorios.

Información: 4.5.4 TypeScript Version

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

0

Puede verificar si la propiedad de link existe utilizando el operador in . Esto reducirá el tipo sin acceder a la propiedad, por lo que TypeScript lo permitirá:

 <> {"link" in props ? ( <Link newTab={props.linkNewTab}>...</Link> ) : ( "to" in props && <Button>...</Button> )} </>
about 4 years ago · Santiago Trujillo Denunciar

0

El problema es que está intentando acceder a un valor en una propiedad que podría no existir. En su lugar, puede verificar si esa propiedad existe en el objeto (usando el operador in ) antes de intentar acceder a su valor. Esto también discriminará al sindicato:

Parque infantil TS

 // instead of this: if (props.link) {} // ^^^^ // Property 'link' does not exist on type 'Button | Link'. // Property 'link' does not exist on type 'Button'.(2339) // prop in obj if ('link' in props) { props.color // ok props.link // ok props.linkNewTab // ok } else { props.color // ok props.to // ok }
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