在 Typescript 中创建动态变量引用
Create a dynamic variable reference in Typescript
在此先感谢所有提供帮助的人。 :)
对于有经验的人来说,这似乎是一个简单的答案,但我已经搜索了互联网以及一些参考书,并没有找到这个问题的直接答案,所以希望它可能有所帮助对其他人也是如此。
我目前正在从 Actionscript 过渡到 Typescript,并且对 vanilla Javascript 有相当多的经验,所以简单地说 Javascript 如果我想动态引用变量,我可以简单地使用这样的东西:
var myTextA = "Hello!";
var myTextB = "Goodbye!";
var textList = ["A", "B"];
console.log("I want to say " + this["myText" + textList[0]]);
结果当然是:"I want to say Hello!"
在 Typescript 中,私有变量 在 class 中似乎不可能,并导致以下 TSC 错误:
"Index signature of object type implicitly has an 'any' type."
据我所知,typescript 希望我在动态构造中以某种方式声明变量类型,但是我找不到关于如何执行此操作的任何明确参考。
为了我自己的目的,为了说明这一点,我正在做一个项目,我需要循环遍历一系列配对变量,这些变量都有相同的开头,但结尾略有不同,所以只需简单地放置变量本身在数组中不是一个选项(或者无论如何都是一个混乱的解决方案)。
例如:
var myVar1a, myVar1b, myVar2a, myVar2b etc...
所以在循环中,我想引用每个的 a 和 b:
console.log(this["myVar" + (i+1) + "a");
console.log(this["myVar" + (i+1) + "b");
非常感谢任何帮助!!
我建议采用面向对象的 'typed' 方法。毕竟这就是为什么你可能想要使用打字稿而不是 javascript。
因此,在打字稿中,您将按以下方式执行此操作。要赋予 'this' 意义,您必须在某些 class 中引用它。根据您的情况,它可能看起来像这样:
class Test
{
private myTextA = "Hello!";
private myTextB = "Goodbye!";
private textList = ["A", "B"];
public callMe()
{
console.log("I want to say " + this["myText" + this.textList[0]]);
}
}
console.log((new Test()).callMe());
As far as I can gather, typescript expects me to declare the variable type in some way, within the dynamic construct, however I cannot find any clear reference on how to do this.
您需要指定一个 index
签名。例如:
// Here you are saying that map is something that when accessed by a string returns a string
var map: {[key:string]:string} = {};
map['myTextA'] = "Hello!";
map['myTextB'] = "Goodbye!";
var textList = ["A", "B"];
console.log("I want to say " + map["myText" + textList[0]]);
在此先感谢所有提供帮助的人。 :)
对于有经验的人来说,这似乎是一个简单的答案,但我已经搜索了互联网以及一些参考书,并没有找到这个问题的直接答案,所以希望它可能有所帮助对其他人也是如此。
我目前正在从 Actionscript 过渡到 Typescript,并且对 vanilla Javascript 有相当多的经验,所以简单地说 Javascript 如果我想动态引用变量,我可以简单地使用这样的东西:
var myTextA = "Hello!";
var myTextB = "Goodbye!";
var textList = ["A", "B"];
console.log("I want to say " + this["myText" + textList[0]]);
结果当然是:"I want to say Hello!"
在 Typescript 中,私有变量 在 class 中似乎不可能,并导致以下 TSC 错误:
"Index signature of object type implicitly has an 'any' type."
据我所知,typescript 希望我在动态构造中以某种方式声明变量类型,但是我找不到关于如何执行此操作的任何明确参考。
为了我自己的目的,为了说明这一点,我正在做一个项目,我需要循环遍历一系列配对变量,这些变量都有相同的开头,但结尾略有不同,所以只需简单地放置变量本身在数组中不是一个选项(或者无论如何都是一个混乱的解决方案)。
例如:
var myVar1a, myVar1b, myVar2a, myVar2b etc...
所以在循环中,我想引用每个的 a 和 b:
console.log(this["myVar" + (i+1) + "a");
console.log(this["myVar" + (i+1) + "b");
非常感谢任何帮助!!
我建议采用面向对象的 'typed' 方法。毕竟这就是为什么你可能想要使用打字稿而不是 javascript。 因此,在打字稿中,您将按以下方式执行此操作。要赋予 'this' 意义,您必须在某些 class 中引用它。根据您的情况,它可能看起来像这样:
class Test
{
private myTextA = "Hello!";
private myTextB = "Goodbye!";
private textList = ["A", "B"];
public callMe()
{
console.log("I want to say " + this["myText" + this.textList[0]]);
}
}
console.log((new Test()).callMe());
As far as I can gather, typescript expects me to declare the variable type in some way, within the dynamic construct, however I cannot find any clear reference on how to do this.
您需要指定一个 index
签名。例如:
// Here you are saying that map is something that when accessed by a string returns a string
var map: {[key:string]:string} = {};
map['myTextA'] = "Hello!";
map['myTextB'] = "Goodbye!";
var textList = ["A", "B"];
console.log("I want to say " + map["myText" + textList[0]]);