Получить имя переменной в 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.