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

118
Visualizações
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 Respostas
Responde à pergunta

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 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