我正在将Java代码翻译成TypeScript,而且我遇到了一些我无法理解的东西。
我在这里创建了对象文字名a
,我设法将它用作关联数组。
然后我定义了类Node
并创建了变量名n
,当我尝试使用变量n作为关联数组的关键时,tsc编译器失败了Illegal property access
。
如果我将n变量转换为类型的kk变量,那么一切都可以。
为什么?
var a = {}
a['a'] = 3
a[4] = 5
class Node {
}
var n:Node = new Node();
a[n] = 44; <---- Illegal property access
var kk: any = n;
a[kk] = 55
答案 0 :(得分:2)
在此声明中:
a[n] = 44;
a
是一个对象。
n
是Node类的一个实例。
因此,您尝试使用类作为a
对象上属性的键。
当您使用kk
类型any
时,TypeScript会假设您知道自己在做什么,并假设它在运行时将是一个字符串或数字。这实际上是忽略了这个问题。
您可以使用n
变量的类型,它是一个字符串:
a[typeof n]