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

239
Visualizações
Texto mecanografiado: ¿cómo se manejan las propiedades comunes entre dos interfaces?

Tengo una interfaz A1 y una interfaz B con algunas propiedades en común.

 interface A1 { id : string, version: number, data: userData, createdBy: string } interface userData { data: string, status: string } interface B { id : string, version: number, definition : JSON }

Entonces, hay algunas propiedades como id, la versión es común entre la interfaz A1 y la interfaz B

Tengo una variable de tipo interfaceA con los siguientes valores

 let interfaceA1Data: interfaceA1 = { id : '123abc', version: 1, data: { data: 'value', status: 'value' }, createdBy: 'me' }

Tengo otra variable de tipo interfaceB, que se acaba de declarar

 let interfaceBData: interfaceB

Ahora quiero copiar los valores de las propiedades comunes de interfaceA1Data a interfaceBData. Las propiedades no comunes deben agregarse a la propiedad de definición. Entonces, al final, interfaceBData tendrá los siguientes valores.

 interfaceBData = { id : '123abc', version: 1, definition: { data: { data: 'value', status: 'value' }, createdBy: 'me' } }

¿Cómo lograr esto en mecanografiado?

El transformador debe ser genérico, por ejemplo, si tengo una interfaz A2, cómo convertirlo al tipo de interfaz B. En todos los casos, la interfaz de destino es la misma, solo difiere la interfaz de origen.

 interface A2 { id : string, version: number, value: valueType, createdBy: string } interface valueType { type: string, requester: string }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Si hay una superposición intencional entre dos interfaces, podría valer la pena extraer propiedades comunes en una interfaz separada. Por ejemplo:

 interface Versioned { id: string, version: number } interface userData { data: string, status: string } interface valueType { type: string, requester: string } interface A1 extends Versioned { data: userData, createdBy: string } interface A2 extends Versioned { value: valueType, createdBy: string }

Ahora, puede continuar con la creación de la interfaz 'B' de la misma manera que lo hizo antes, simplemente extendiendo Versionado una vez más con la propiedad de definition como Objeto:

 interface B extends Versioned { definition: Object }

... pero es posible que desee proporcionar un rigor adicional convirtiéndolo en una interfaz genérica, como esta:

 interface Serialized<T extends Versioned> extends Versioned { definition: Omit<T, keyof Versioned> }

Ahora puede escribir fácilmente una función de transformador para cualquier tipo/interfaz que extienda Versionado convirtiéndolo en una forma específica de Serializado:

 function transformer<T extends Versioned>( {id, version, ...args}: T): Serialized<T> { return { id, version, definition: {...args} } }

Aquí está el enlace de TS Playground .

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