在 TypeScript 中使用类型变量访问对象文字不起作用
Posted
技术标签:
【中文标题】在 TypeScript 中使用类型变量访问对象文字不起作用【英文标题】:Access object literal with typed variable in TypeScript does not work 【发布时间】:2012-10-08 16:05:45 【问题描述】:我正在将 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
【问题讨论】:
【参考方案1】:在此声明中:
a[n] = 44;
a
是一个对象。
n
是 Node 类的一个实例。
因此,您正在尝试使用类作为 a
对象上属性的键。
当你使用kk
,它是一个any
类型时,TypeScript 会假设你知道你在做什么,并且会假设它在运行时会是一个字符串或数字。这真是无视问题。
您可以使用n
变量的类型,它是一个字符串:
a[typeof n]
【讨论】:
我明白了。使用 typeof 不是答案。我在 Node 类上有 getId 函数,所以我将使用 n.getId()。我想我只是忘了它是 javascript 毕竟没有真正的关联数组。以上是关于在 TypeScript 中使用类型变量访问对象文字不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular2 中访问 Typescript 对象变量
typescript - 通过使用变量索引对象接口来获取类型