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

251
Visualizações
Inconsistencia en la sobrecarga de la función TypeScript

Considere este ejemplo:

 export function fn(arg: string): void; export function fn(arg: number): void; export function fn(arg: any) { console.log(arg); }

Entonces, fn se puede llamar con una cadena o un número.

 fn('hello!'); fn(42);

Hasta aquí todo bien. Pero luego fn se ejecuta en un lugar diferente:

 function fn2(arg2: string | number) { fn(arg2); }

En este caso, TypeScript se queja:

Ninguna sobrecarga coincide con esta llamada. Sobrecarga 1 de 2, '(arg: string): void', dio el siguiente error.

 Argument of type 'string | number' is not assignable to parameter of type 'string'. Type 'number' is not assignable to type 'string'. Overload 2 of 2, '(arg: number): void', gave the following error. Argument of type 'string | number' is not assignable to parameter of type 'number'. Type 'string' is not assignable to type 'number'.ts(2769)

index.tsx(3, 17): la llamada se habría realizado correctamente en esta implementación, pero las firmas de implementación de las sobrecargas no son visibles externamente.

¿Puede alguien ayudarme a entender lo que está pasando aquí?

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

0

Las sobrecargas no son lo mismo que los tipos de unión. Las sobrecargas definen funciones 'separadas' mientras que las uniones le permiten poner diferentes tipos como argumentos.

 // fails function fn2(arg2: string | number) { fn(arg2); // uses the union type } // works function fn3(arg2: string | number) { if(typeof arg2 === 'string') { return fn(arg2); // uses string } return fn(arg2); // uses number }

Esto significa que fn2 busca una declaración de función que tenga un argumento de tipo string|number , mientras que fn3 busca una función con tipo string o una función con tipo number como primer argumento.

No debe usar any si sabe exactamente qué tipo desea como parámetro de función.

Ver la documentación para tipos de unión

about 4 years ago · Juan Pablo Isaza Relatório

0

Puedes agregar otra sobrecarga

 export function fn(arg: string): void; export function fn(arg: number): void; export function fn(arg: any): void; export function fn(arg: any) { console.log(arg); } fn('hello!'); fn(42); function fn2(arg2: string | number) { fn(arg2); }

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