Get name of variable in typescript

How can I get a variables name in typescript? I want something like this:

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


ANSWERS:


Expanding on basarat's answer, you need to create function that takes as a parameter a function that will contain the access to your variable. Because in JavaScript you can access the code of any function it then becomes a simple matter of using a regex to extract the variable name.

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 is JavaScript at runtime. So the same limitations as there apply : Get the 'name' of a variable in Javascript

However you can do stuff like

alert(getVariableName(()=>name)) 

Here you would parse the body of the function passed into getVariableName and get that as a string.


Expanding Cernicova-Dragomir's answer:

Expanding on basarat's answer, you need to create function that takes as a parameter a function that will contain the access to your variable. Because in JavaScript you can access the code of any function it then becomes a simple matter of using a regex to extract the variable name.

to also support a field of an object:

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"

Notice that I've deleted the "return" because it doesn't work on Node.js when targeting ES6.


One approach is to store such values in an object:

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

We can't get the name of o, but we can get the names (or "keys") of its two properties:

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


 MORE:


 ? What is the modularization story for TypeScript in the browser?
 ? angularjs with typescript - cannot access $scope
 ? Sailsjs model static method
 ? Check if variable is a specific interface type in a typescript union
 ? TypeScript - Unable to create a "delete" function outside of a class
 ? TypeScript interface does not result in an error if property is initialized as null
 ? Typescript. How to export two classes (in separate files) in one module?
 ? 404 GET /app - Angular2 quickstart
 ? Wrap CommonJS 3rd party library as AMD module
 ? Lazy loading modules angular 2 and asp-net core