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

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

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