Получить имя метода в классе TypeScript - PullRequest
0 голосов
/ 13 января 2020

Есть ли способ получить имя метода / функции в классе TypeScript?

Следующий код TypeScript предназначен для печати имени класса и имени метода во время выполнения. Имя класса хорошо работает, используя this.constructor.name, но как мне получить имя метода?

export class MyClass {
    public myMethod() {
        console.log('Class name: '  + this.constructor.name);
        console.log('Method name: ' + XXX);
    }
}

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Если вы хотите инкапсулировать протоколирование myMethod вызова и других в более обобщенном виде (сквозная проблема), вы можете использовать декоратор :

function log<A extends any[], R>(
    target: Object,
    methodName: string,
    descriptor: TypedPropertyDescriptor<(...args: A) => R>) {
    let method = descriptor.value!; // this is the wrapped function
    descriptor.value = function (...args: A) {
        // instead of methodName, method.name works as well to get its name
        console.log("Calling", methodName, "with", args, "from", target.constructor.name)
        return method.apply(target, args);
    }
}

class MyClass {
    @log
    public myMethod() { }

    @log
    public myMethod2(s: string) { return 42 }
}

new MyClass().myMethod() // Calling myMethod with Array [] from MyClass
new MyClass().myMethod2("foo") // Calling myMethod2 with Array [ "foo" ] from MyClass

Здесь образец . Имейте в виду, что эта функция еще не стабильна и должна быть включена с помощью опции компилятора experimentalDecorators.

0 голосов
/ 13 января 2020

При работе в узле вы можете использовать номер вызывающего абонента следующим образом:

allerCallsite().getMethodName();

, что возвращает:

"myMethod"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...