Получить имя переменной в typescript

Как я могу получить имя переменных в TypeScript? Я хочу что-то вроде этого:

var name = "Foo";
alert(getVariableName(name)); //Prints "name"

4 ответов


расширение на ответ basarat, вы должны создать функцию, которая принимает в качестве параметра функцию, которая будет содержать доступ к вашей переменной. Поскольку в JavaScript вы можете получить доступ к коду любой функции, это становится простым вопросом использования regex для извлечения имени переменной.

var varExtractor = new RegExp("return (.*);");
export function getVariableName<TResult>(name: () => TResult) {
    var m = varExtractor.exec(name + "");
    if (m == null) throw new Error("The function does not contain a statement matching 'return variableName;'");
    return m[1];
}

var foo = "";
console.log(getVariableName(() => foo));

TypeScript является JavaScript во время выполнения. Поэтому применяются те же ограничения, что и там : получить " имя " переменной в Javascript

вы можете делать такие вещи, как
alert(getVariableName(()=>name)) 

здесь вы проанализируете тело функции, переданной в getVariableName и получите это как строку.


один из подходов заключается в сохранении таких значений в объекте:

var o = {
    firstName: "Homer",
    lastName: "Simpson"
};

мы не можем узнать имя o, но мы можем получить имена (или" ключи") его двух свойств:

var k = Object.keys(o);
console.log(k[0]); // prints "firstName"

расширения Cernicova-Драгомир ответ:

расширение на ответ basarat, вы должны создать функцию, которая принимает в качестве параметра функция, которая будет содержать доступ к вашему переменная. Потому что в JavaScript вы можете получить доступ к код любого функция затем становится простым вопросом использования regex для извлечения имя переменной.

С помощью поля объекта:

var varExtractor = new RegExp("(.*)");

export function getVariableName<TResult>(getVar: () => TResult) {
    var m = varExtractor.exec(getVar + "");

    if (m == null)
        throw new Error("The function does not contain a statement matching 'return variableName;'");

    var fullMemberName = m[1];
    var memberParts = fullMemberName.split('.');

    return memberParts[memberParts.length-1];
}

var foo = { bar: "" };
var varName = getVariableName(() => foo.bar ); //prints "bar"

обратите внимание, что я удалил " return" потому что он не работает на узле.js при нацеливании на ES6.