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

211
Vistas
Cómo sobrecargar una función JavaScript que está definida en un objeto

He definido algunas funciones en este objeto dentro de una calculator de funciones porque quiero encadenarlas. Mi objetivo es sobrecargar la función addNumber pero parece que no puedo obtener la sintaxis correcta.

A continuación se muestra un ejemplo de lo que quiero lograr (no funcionará porque la sintaxis es incorrecta)

 const calculator = () => { return { result: 0, addNumber(a: number) : number; addNumber(a: number | b: number): number; addNumber(a: number | b: string): number { // Implementation to add numbers depending on function overload return this; }, multiplyNumber(a) { this.result = this.result * a; return this; }, log() { console.log(this.result); } }; } // logs 10 calculator().addNumber(10).log(); // logs 25 calculator().addNumber(10,15).log(); // logs 25 calculator().addNumber(10,'15').log();

Este fue el ejemplo que me dio la idea, sin embargo, la función se define normalmente. ¿Cuáles son algunas formas en que puedo sobrecargar una función que está definida en el objeto?

 function makeDate(timestamp: number): Date; function makeDate(m: number, d: number, y: number): Date; function makeDate(mOrTimestamp: number, d?: number, y?: number): Date { if (d !== undefined && y !== undefined) { return new Date(y, mOrTimestamp, d); } else { return new Date(mOrTimestamp); } } const d1 = makeDate(12345678); const d2 = makeDate(5, 5, 5); const d3 = makeDate(1, 3);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si está dispuesto a cambiar a una clase anónima, entonces es bastante simple sobrecargarse:

 const calculator = () => { return new class { result = 0; addNumber(a: number) : this addNumber(a: number, b: number): this addNumber(a: number, b: string): this addNumber(a: number, b?: number | string): this { // Implementation to add numbers depending on function overload return this; } multiplyNumber(a: number) { this.result = this.result * a; return this; } log() { console.log(this.result); } }; }

Enlace del patio de recreo

Los métodos literales de objetos y las expresiones de funciones no admiten la sobrecarga. La única otra opción es usar una expresión de función con una aserción de tipo:

 const calculator = () => { return { result: 0, addNumber : function (a: number, b?: number | string) { return this; } as { <T>(this: T, a: number) : T <T>(this: T, a: number, b: number): T <T>(this: T, a: number, b: string): T } }; }

Enlace del patio de recreo

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