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

117
Vistas
Problema de mecanografiado con el uso de múltiples tipos

He estado atormentando mi cerebro durante horas con esto, básicamente, tengo un montón de diferentes tipos definidos así:

 export type SharedAPIProps = { id: string; }; export type ButtonAPIProps = SharedAPIProps & { type: "paragraph--button"; field_title: string; }; export type SlideAPIProps = SharedAPIProps & { type: "paragraph--slide"; field_slides: [] }; export type allAvailableComponents = ButtonAPIProps | SlideAPIProps; export type ButtonProps = { title: string; } export type SlideProps = { slides: []; } export type allCleanedProps = ButtonProps | SlideProps;

Luego tengo una función para convertir una respuesta API a una versión limpia:

 export const toCleanProps = (component: allAvailableComponents): allCleanedProps => { const { type } = component; const convertedProps: allCleanedProps = {} as allCleanedProps; switch (type) { case "paragraph--button": convertedProps.title = component.field_title; break; case "paragraph--slide": convertedProps.slides = component.field_slides; break; } return convertedProps; }

El problema es que recibo errores de mecanografiado en cada propiedad de convertedProps . Cuando tengo un solo tipo definido en allComponentProps como:

 export type allAvailableComponents = ButtonAPIProps;

No obtengo los errores en las propiedades del paragraph--button convertedProps , pero por supuesto sí en el paragraph--slide propiedades convertedProps .

Nuevo en TypeScript, así que tengan paciencia conmigo, probablemente me estoy perdiendo algo simple aquí y probé un montón de cosas diferentes, pero ninguna funciona.

El mensaje de error es que esos accesorios no existen en los tipos definidos.

Here's the complete example: https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBDAnmYcDKALAhlYATAQQAUBJIqCMAZzgF44BvAKDjgEs8AuOKmKNgHYBzANxMAvmKahIsBMlQAhAK4wYEAcTIVqddNlyFS5SjQBkjFvJTcARGBxYhULGAwBadwCNV6gbbFWADM2YAAbPAB9GDYYMOBuXn5hMUkmaXBoeCQUdDCOYC0TXXpMHHwinXNLVhyEuHtHZ1cPdyp8vGAAqxDwqPaCqm4AbQBdCSkZLOtULDCwggA3LDYwrC94gGEIAFtIAWABGBp6FTUNStM4AB88gsvqKQzZbIU4M79ik5qEWPjEviCUQSdJTOR1O6dL56ZisAadIZwMapOCgzLgt5zMKbeJYA54aGnXwaaG3NAdYBfSbo+AAYw0vAQEBxwDxhLgAAp6XsNIcYNwsUsVmsNsBtjyDkcqABKAXzFl4-CEgB8P3pAkZDBmcHEem5+z5gVRrHVjPVi2AsCVVTl2Nx+PZDF1WBoWIVDqqUjhAHdYrSMJy6tKfiaXahGi5mm5PD5zv5OFZWCaNBarQSqgA6GJxVD0fW8o4Z3oRaJ-YBGpNwLy4LAAawrcFpYYaDkjLmjbQptgTleTAlTMGtpgz8OA33zkpgRdCJdHVAbrGrrPrVnE6VYuBgyigAkbKctg-TplSQA

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

0

El problema fundamental es que restringir el tipo de component no reduce el tipo de convertedProps , por lo que TypeScript no sabe que las asignaciones están bien.

Puede solucionarlo creando componentProps en las ramas:

 export const toCleanProps = (component: allAvailableComponents): allCleanedProps => { const { type } = component; let convertedProps: allCleanedProps; switch (type) { case "paragraph--button": convertedProps = { title: component.field_title, }; break; case "paragraph--slide": convertedProps = { slides: component.field_slides, }; break; default: throw new Error(`Unexpected 'type'`); } return convertedProps; }

Enlace del patio de recreo

Si el proceso de limpieza está involucrado, puede dividirlo en funciones auxiliares:

 const cleanButtonProps = (component: ButtonAPIProps): ButtonProps => { return { title: component.field_title, }; }; const cleanSlideProps = (component: SlideAPIProps): SlideProps => { return { slides: component.field_slides, }; }; export const toCleanProps = (component: allAvailableComponents): allCleanedProps => { const { type } = component; let convertedProps: allCleanedProps; switch (type) { case "paragraph--button": convertedProps = cleanButtonProps(component); break; case "paragraph--slide": convertedProps = cleanSlideProps(component); break; default: throw new Error(`Unexpected 'type'`); } return convertedProps; }

Enlace del patio de recreo

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