如何在打字稿中获取变量名称?我想要这样的东西:
var name = "Foo";
alert(getVariableName(name)); //Prints "name"
Run Code Online (Sandbox Code Playgroud)
Tit*_*mir 18
扩展basarat的答案,您需要创建一个函数,该函数将一个函数作为参数,该函数将包含对变量的访问.因为在JavaScript中你可以访问任何函数的代码,然后使用正则表达式提取变量名称变得简单.
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));
Run Code Online (Sandbox Code Playgroud)
一种方法是将这些值存储在对象中:
var o = {
firstName: "Homer",
lastName: "Simpson"
};
Run Code Online (Sandbox Code Playgroud)
我们无法获取 的名称o,但我们可以获取它的两个属性的名称(或“键”):
var k = Object.keys(o);
console.log(k[0]); // prints "firstName"
Run Code Online (Sandbox Code Playgroud)
TypeScript是运行时的JavaScript.因此适用的限制相同:在Javascript中获取变量的"名称"
但是你可以做类似的事情
alert(getVariableName(()=>name))
Run Code Online (Sandbox Code Playgroud)
在这里,您将解析传递给getVariableName的函数体,并将其作为字符串获取.
扩展 Cernicova-Dragomir 的答案:
扩展 basarat 的答案,您需要创建一个函数,该函数将一个函数作为参数,该函数将包含对您的变量的访问。因为在 JavaScript 中您可以访问任何函数的代码,所以使用正则表达式来提取变量名称变得很简单。
还支持对象的字段:
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"
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了“return”,因为它在面向 ES6 时不适用于 Node.js。
| 归档时间: |
|
| 查看次数: |
13322 次 |
| 最近记录: |