如何覆盖Typescript中的键迭代器?

时间:2016-11-17 13:12:50

标签: javascript for-loop typescript iterator

我有这个打字稿类(简化为了简化):

class Dictionary<T> {

    items = [];

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

    ... more code here ...

}

当我实例化变量

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

在代码的另一部分(我无法更改)中,对象在循环中使用:

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

我得到“items”,我的对象的成员,而我想在channels对象中获取items数组的内容。

所以在这种情况下我想要的是

[0,1] items数组的键。

这可能吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试通过实现Iterator来实现此目的。这将允许您指定对象的循环如何工作。 看看here

可能只有你以ES6为目标才有可能 但this question似乎建议您只需实现next()方法即可使其工作。

答案 1 :(得分: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" ]

答案 2 :(得分:-1)

已更新:通过value获取object key 试试这个

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