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

237
Vistas
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 Respuestas
Responde la pregunta

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