Búsqueda de sitios web

typescript - ¿Cómo obtener el nombre de un método estático en una clase?


Imprimo muchos registros en el método estático y quiero usar el nombre del método como contexto. Pero no quiero declarar una variable context y asignarle el nombre de la función/método.

Quiero usar el contexto accediendo al nombre del método. No solo en un método estático de clase, sino también en cada función.

Aquí está mi intento:

class CloudFunction {
  public static parse() {

    console.log(this.name); // CloudFunction
    console.log(CloudFunction.parse.name); // get nothing here


    // Don't want to declare `context` variable and assign method name to it.
    const context = 'parse';
    logger.debug('a log', { context, arguments: 'pubsubMessage' });

    //... many logs use this context

    // want the better way like this:
    // const self = this;
    // logger.error(new Error('bad'), {context: self.name })
  }
}


CloudFunction.parse();

Ninguno de ellos funciona. ¿Puedo usar la forma reflect para obtenerlo? No estoy seguro de que reflect pueda hacer esto.

actualizar

Aquí está mi resultado:

☁  DL-Toolkits [master] npx ts-node /Users/ldu020/workspace/github.com/mrdulin/ts-codelab/src/class/get-static-method-name/index.ts
CloudFunction

Respuesta #1

Estoy obteniendo el nombre del método, ¿o estoy entendiendo algo mal?

class ClassWithStaticMethod {
  static staticMethod() {
    console.log('1: ' + ClassWithStaticMethod.staticMethod.name); // output: '1: staticMethod'
    return ClassWithStaticMethod.staticMethod.name;
  }
}

console.log('2: ' + ClassWithStaticMethod.staticMethod()); // output: '2: staticMethod'

Ejemplo de código

Respuesta #2

Creo que es debido al modificador de acceso público antes del método estático.

class CloudFunction {
  static parse() {
    console.log(this.name); // CloudFunction
    console.log(CloudFunction.parse.name); // get nothing here

    const context = 'parse';
  }
}


CloudFunction.parse();

Este código funciona sin modificador de acceso

Artículos relacionados