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

249
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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