Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!