【问题标题】:Access object literal with typed variable in TypeScript does not work在 TypeScript 中使用类型变量访问对象文字不起作用
【发布时间】: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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    在此声明中:

    a[n] = 44;
    

    a 是一个对象。

    n 是 Node 类的一个实例。

    因此,您正在尝试使用类作为 a 对象上属性的键。

    当你使用kk,它是一个any 类型时,TypeScript 会假设你知道你在做什么,并且会假设它在运行时会是一个字符串或数字。这真是无视问题。

    您可以使用n 变量的类型,它是一个字符串:

    a[typeof n]
    

    【讨论】:

    • 我明白了。使用 typeof 不是答案。我在 Node 类上有 getId 函数,所以我将使用 n.getId()。我想我只是忘了它是 javascript 毕竟没有真正的关联数组。
    猜你喜欢
    • 2018-01-19
    • 2020-10-27
    • 2016-07-28
    • 2019-10-12
    • 2014-08-20
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多