2016-11-17 120 views
-1

我有此打字稿類(減小爲簡單起見):如何覆蓋Typescript中的鍵迭代器?

class Dictionary<T> { 

    items = []; 

    add(item: T) { 
     this.items.push(item); 
    } 

    ... more code here ... 

} 

當我實例化一個variabel

var channels = new Dictionary<Channel>(); 
channels.add(new Channel('name1')); 
channels.add(new Channel('name2')); 

在代碼另一部分(我不能改變)該對象中所使用一個循環:

for (var key in channels){ console.log(key);} 

我得到「項目」,我的對象的成員,而我想獲得的內容t他在通道對象中項目數組。

所以,我想在這種情況下是項目陣列的

[0,1]鍵。

這可能嗎?

回答

-1

更新:要獲得objectvalue通過key 嘗試這樣

for (var key in channels){ 
    console.log(channels[key]); 
} 
+0

這是不幸的是沒有一個選項... – mvermand

+0

你能展現'Channel'類在OP –

+0

這是一個任意類...詞典應該能夠容納任何類型的對象。 – mvermand

1

您可以嘗試通過實現迭代器來做到這一點。這將允許你決定如何循環你的對象的工作。 看一看here

可能只有當你的目標是ES6, 然而this question似乎建議你可以實現一個next()方法來使它工作。

+0

迭代器只能使用for..of循環,而不能使用for..in循環。可悲的是,我無法改變for..in循環 – mvermand

0

也許這個解決方案,但存在length成員:

class Dictionary<T> extends Array<T> { 
    add(item: T) { 
     this.push(item); 
    } 
} 

class Channel { 
    constructor(public name: string) { 
    } 
} 

var channels = new Dictionary<Channel>(); 
channels.add(new Channel('name1')); 
channels.add(new Channel('name2')); 

console.log(Object.keys(channels)); // Array [ "0", "1", "length" ]