1

Java コードを TypeScript に変換していて、理解できないものに遭遇しました。ここでオブジェクト リテラル名を作成しa、それを連想配列として使用することができました。次に、クラスを定義Nodeして変数 name を作成しまし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
4

1 に答える 1

2

この声明では:

a[n] = 44;

aはオブジェクトです。

nNode クラスのインスタンスです。

したがって、クラスをオブジェクトのプロパティのキーとして使用しようとしていaます。

kk型であるを使用するanyと、TypeScript は、実行時に何を行っているかがわかっていると想定し、実行時に文字列または数値であると想定します。これは本当に問題を無視しています。

n文字列である変数の型を使用できます。

a[typeof n]
于 2012-10-18T09:18:09.137 に答える