在 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 - 通过使用变量索引对象接口来获取类型

Typescript 从具有泛型类型的对象索引调用函数

如何使用 get 方法访问 Typescript 中对象的字段?

盘点 TypeScript 的基础认识 二

盘点 TypeScript 的基础认识 二