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

149
Vistas
Envolviendo los argumentos o el resultado de una función anónima

Quiero reasignar una función anónima para agregar a lo que hace. Básicamente estoy buscando la siguiente funcionalidad.

 let f1 = (x: number) => x + 100; // f1 = (x: number) => f1(x) + 20; // becomes recursive -> stack overflow, not what I want f1(3) // 123

Las dos opciones que veo son 1. envolver el argumento o 2. de alguna manera envolver el resultado. La primera opción parece más fácil pero no estoy seguro de cómo lograrlo (o si lo que estoy pidiendo es imposible).

Editar: Evidentemente, mi pregunta no fue lo suficientemente clara. He hecho un nuevo ejemplo.

https://tsplay.dev/mpv3Mw

 class Cat { eat() { const newCat = createFullCat(this); return newCat; } drink() { const newCat = createQuenchedCat(this); return newCat; } sleep() { const newCat = createRestedCat(this); return newCat; } } function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) { let f1 = (cat: Cat) => cat.drink(); if (makeCatEat) { f1 = (cat: Cat) => f1(cat).eat(); // Need different way to do this } if (makeCatSleep) { f1 = (cat: Cat) => f1(cat).sleep(); // Need different way to do this } return f1; }

Si es posible, me gustaría hacer esto sin crear otra variable.

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Primero, asignó un valor (una función) a f1 :

 let f1 = (x: number) => x + 100;

Luego, asignó un nuevo valor (otra función) a f1 :

 f1 = (x: number) => f1(x) + 20;

Cuando le asignó la nueva función, la función anterior ya no tenía ninguna referencia. En la nueva función, la referencia a f1 se refiere a sí misma (por lo que se repetirá para siempre cuando se la invoque).

Si desea mantener una referencia al primero para que se pueda usar en el segundo, solo asigne al segundo un nombre diferente, como este:

Parque infantil TS

 const f1 = (x: number) => x + 100; const f2 = (x: number) => f1(x) + 20; console.log(f2(3)); // 123

Si desea aplicar una serie de transformaciones en un número (pero no quiere tener que crear un nombre de variable para cada función de transformación en su programa), puede usar una matriz de funciones para procesar el número en orden, como esta :

Parque infantil TS

 type NumberTransform = (n: number) => number; function transformNumber (n: number, transforms: NumberTransform[]): number { let current = n; for (const fn of transforms) current = fn(current); return current; } const transforms: NumberTransform[] = []; transforms.push(n => n + 100); transforms.push(n => n + 20); const result = transformNumber(3, transforms); console.log(result); // 123
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que lo que necesita son solo dos variables para sus funciones en lugar de reasignar el f1 .

 const f1 = (x: number) => x + 100; const f2 = (x: number) => f1(x) + 20; f2(3) // 123

Según el ejemplo de código actualizado, ¿es esto algo que logra lo que está hablando?

 function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) { if(makeCatSleep) { return (cat: Cat) => cat.drink().sleep(); } if(makeCatEat) { return (cat: Cat) => cat.drink().eat(); } //Assuming you always want the cat to drink return (cat: Cat) => cat.drink(); }
about 4 years ago · Santiago Trujillo 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