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

89
Vistas
tipo genérico para agregar propiedades faltantes en el tipo

Tengo la función onMessage que obtiene eventos del SDK de un tercero en mi aplicación

 interface TypeA { a:string, b:undefined } interface TypeB{ b: 'a'|'b', c: 'a'|'b' } type TypeC = TypeA | TypeB const onMassege=( event: TypeC )=>{ if (event.a === 'a'){ /* TS-ERROR Property 'a' does not exist on type 'TypeC' .Property 'a' does not exist on type 'TypeB */ } if ( event.b === 'a'){// good } }

en el ejemplo anterior, el acceso a las propiedades event.a obtiene un error de type-script pero event.b no obtiene ningún error porque las propiedades b se definen en todos los tipos de interfaz TypeC

Necesito un tipo genérico para agregar propiedades faltantes en todos los tipos y agregar c: undefined a mi interfaz TypeC

TS-playGround

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede crear el tipo que está buscando definiendo un KeyUnion de tipo genérico que devuelve las claves de los objetos en una unión:

 type KeyUnion<T> = T extends unknown ? keyof T : never

y use esto para crear un tipo de objeto que tenga una propiedad para cada una de esas claves con como tipo de valor la unión de tipos posibles que la propiedad puede tener en los objetos en la unión, o undefined :

 type Merge<T> = { [K in KeyUnion<T>]: T extends Record<K,any> ? T[K] | undefined : never }

Ahora Merge<TypeC> se evaluará como

 { a: string | undefined; b: "a" | "b" | undefined; c: "a" | "b" | undefined }

y puede hacer una verificación de tipo onMessage usando event: Merge<TypeC> .

Una desventaja de este enfoque es que pierde la seguridad de tipo en las cláusulas luego, ya que el event siempre tendrá el tipo Merge<TypeC> , por lo que incluso en el primer caso, el event seguirá teniendo una propiedad c , y en el segundo caso tendrá un a . Por esta razón, podría ser más seguro simplemente agregar un control adicional in la condición cuando sea necesario, de modo que el tipo de event se reduzca adecuadamente en cada caso:

 const onMessage = (event: TypeC) => { if ('a' in event && event.a ==='a') { // event has type `TypeA` here } if (event.b ==='a') { // event has type `TypeB` here } }

patio de recreo mecanografiado

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