Búsqueda de sitios web

node.js - ¿Hay una mejor manera de pasar parámetros de clase a una función externa?


He creado un módulo de Node.js escrito en TypeScript que funciona bien, pero no estoy particularmente contento con el método que he usado para pasar parámetros declarados en la clase a funciones externas (funciones declaradas fuera del alcance de la clase). ¿Hay una mejor manera de hacer esto sin pasar las variables una por una a la función 'externa'?

Sé que podría mover la función fooFunc a la clase, pero estoy evitando esto porque no quiero que esta función esté disponible para el código que consume el módulo resultante (solo quiero que check() esté disponible) debido a que la clase se exporta.

export class Foo {

   private readonly a: number;

   constructor(a: number) {
      this.a = a;
   }

   async check() {
      fooFunc(this.a);
   }

}

async function fooFunc(a: number) {
   console.log(a);
}

Respuesta #1

Podrías .call a la fooFunc, de modo que this dentro de fooFunc se refiera a la instancia de foo, por lo que no es necesario pasar variables de instancia a fooFunc:

export class Foo {

   readonly a: number;

   constructor(a: number) {
      this.a = a;
   }

   async check() {
      fooFunc.call(this);
   }

}

async function fooFunc(this: Foo) {
    console.log(this.a);
}

(esto requiere que a no sea privado, por supuesto)

Respuesta #2

Podrías crear una superclase que maneje este comportamiento. Aquí está mi solución

abstract class ParamCheck {
    private readonly args: any[];

    constructor(...args) {
        this.args = args;
    }

    async check() {
        fooFunc(this.args);
    }
}

class Foo extends ParamCheck {
    constructor(private a: number, private b: number) {  
        super(a, b);
    }
}

async function fooFunc(...args) {
    console.log(args);
}

new Foo(1, 2).check();