Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!