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

105
Visualizações
Typescript asigna a un objeto propiedades que no existen en la definición del tipo de objeto

No entiendo por qué Typescript no resalta esto como un error...

Cuando agrego condicionalmente a un objeto una nueva propiedad que no existe en esa definición de tipo de objeto, Typescript la asigna

 type Filters = {
 keywords: Array<string>
 }
 
 const condition = 1;
 
 let filters: Filters = {keywords: ['keyword']}
 
 filters = {
 ...filters,
 ...(condition && {...{ tags: ['tag']}}),
 }

Resultados:

 filters: {
 keywords:["keyword"]
 tags:["tag"]
}

Mientras esperaba obtener este error:

 Object literal may only specify known properties, and 'tags' does not exist in type 'Filters'.

PD: obtengo el error esperado cuando intento agregar la misma propiedad de esta manera:

 filters = {...filters, tags: ['tag']}
almost 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Actualmente, esta es una característica que falta en TypeScript; las verificaciones de propiedades excesivas solo ocurren en ciertos contextos, y hasta ahora nadie ha implementado el tipo de verificación contextual de los contenidos de los objetos en línea que se distribuyen en los objetos externos.

Hay una solicitud de función abierta para esto en microsoft/TypeScript#39998 . Actualmente está marcado como "Esperando más comentarios", por lo que es posible que desee ir a ese problema, darle un 👍 y describir en un comentario su caso de uso y por qué es convincente. Dudo que tomar tal acción tuviera mucho efecto, pero no dolería.


Hasta donde yo sé, no hay una gran solución para darle este comportamiento. Si desea utilizar una función auxiliar como

 const noExcess = <T extends object>() =>
 <U extends { [K in keyof U]: K extends keyof T ? T[K] : never }>(u: U) => u;

Y especializarlo para Filters :

 const noExcessFilters = noExcess<Filters>();

Y luego llámalo:

 const z = noExcessFilters({
 ...filters,
 ...(condition && { tags: ['tag'] }),
}); // error! Types of property 'tags' are incompatible.

marcará situaciones como esta, pero no sé si te vale la pena.

Enlace del patio de recreo al código

almost 4 years ago · Santiago Trujillo 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