2012-10-18 50 views
1

我正在將Java代碼翻譯成TypeScript,並且遇到了一些我無法理解的東西。 我在這裏創建了對象字面名稱a,我設法將它用作關聯數組。 然後我定義了類Node並創建變量名稱n,當我嘗試將變量n用作關聯數組的關鍵字時,tsc編譯器失敗,出現Illegal property access。 如果我將n變量轉換爲任何一切正常的類型的kk變量。TypeScript中的類型變量訪問對象文字不起作用

這是爲什麼?

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 

回答

2

在此聲明:

a[n] = 44; 

a是一個對象。

n是Node類的一個實例。

所以你正試圖使用​​一個類作爲a對象的屬性的關鍵。

當您使用kk(這是一個any類型)時,TypeScript將假定您知道您在做什麼並假定它將在運行時爲字符串或數字。這實在是無視問題。

你可以使用n變量,它是一個字符串類型:

a[typeof n] 
+0

我明白了。使用typeof不是答案。我有Node類的getId函數,所以我會使用n.getId()。我想我只是忘了它是JavaScript,因此沒有真正的關聯數組。 –