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

277
Visualizações
Tipos con diferentes parámetros como sobrecarga de función

Estoy tratando de escribir un tipo que actúe como una firma de función que permita tener un conjunto diferente de parámetros:

  • El primer caso, la función espera un predicado.
  • El segundo caso, la función espera dos parámetros.

Este es el ejemplo: Enlace a TS PlaGround . También copio el código aquí por si acaso:

 type T1<Tentity> = (predicate: ((entity: Tentity) => Tentity | void)) => void; type T2<TEntity> = (propertyName: keyof TEntity, newValue: unknown) => void; type TCommon<TEntity> = T1<TEntity> | T2<TEntity>; interface IEntity { name: string; surname: boolean; } const entity : IEntity = { name: 'Foo', surname: true }; const method : TCommon<IEntity> = (param1, param2) => { if (typeof(param1) === 'function') { param1(entity); } else { (entity[param1] as any)= param2; } } method('name', 'Bar'); method((entity) => { entity.name = 'Bar'});

Como puede ver, espero que ambas llamadas de method funcionen correctamente.
Por lo que creo, TypeScript/IntelliSense debería ser lo suficientemente inteligente como para hacer este razonamiento:

  • Dado que el primer parámetro es una function , entonces tenemos un T1 , por lo que ni siquiera necesito el segundo parámetro.
  • De lo contrario, el primer parámetro es una cadena, por lo que tenemos un T2 , por lo que también espero un segundo parámetro.

Desafortunadamente, esto no es lo que está sucediendo: parece que TypeScript no puede "creer" que param1 también puede ser una función:

ingrese la descripción de la imagen aquí

Estoy bastante seguro de que esto se puede hacer porque tenemos la sobrecarga de funciones, pero solo he podido usarlos dentro de una class . Pero básicamente es lo mismo, espero que en este caso esté definiendo el method como una variable global.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Use una interfaz para describir un conjunto de firmas de llamada:

 interface TCommon<TEntity> { (predicate: ((entity: TEntity) => TEntity | void)): void (propertyName: keyof TEntity, newValue: unknown): void; }

Pero aún no hemos terminado. El segundo parámetro es opcional en el sentido de que la primera sobrecarga no necesita un segundo parámetro, pero la segunda sobrecarga sí.

Entonces marcamos el segundo parámetro como opcional:

 const method: TCommon<IEntity> = (param1, param2?: unknown) => {

Y eso es.

Patio de juegos

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