TypeScript访问字典类型对象

时间:2013-06-28 14:53:41

标签: typescript

我班上需要一种字典(我不确定是否会调用这种对象),我正在使用它:

  

inputCollection:{[name:string]:HTMLInputElement};

我可以得到并设置如下值:

  

this.inputCollection ['inputId'] =   的document.getElementById( 'inputId');

我想以下列方式访问我的字典,以获取第一个元素

  

this.inputCollection [0]

我怎样才能轻松实现这一目标?

3 个答案:

答案 0 :(得分:3)

如果要使用字符串或索引获取项目,则必须实现Dictionary。 TypeScript没有框架类库,所以你不能免费获得它 - 只需要制作一个语言特性。

您可以在技术上使用字符串和数字索引器,但第一个字符串项与第一个数字项不同。例如:

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

var items = [];

items['a'] = new Item('One');
items['b'] = new Item('Two');
items[0] = new Item('Three');

alert(items['a'].name); // One
alert(items[0].name); // Three

这是一个非常基本的词典类。

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

class Dictionary<T> {
    private items = [];

    add(key: string, value: T) {
        this.items.push(value);
        this.items[key] = value;
    }

    getByIndex(index: number) {
        return this.items[index];
    }

    getByKey(key: string) {
        return this.items[key];
    }
}

var dictionary = new Dictionary<Item>();
dictionary.add('a', new Item('One'));
dictionary.add('b', new Item('Two'));

alert(dictionary.getByIndex(0).name);
alert(dictionary.getByKey('a').name);

如果您更改项目,这也有效...

dictionary.add('a', new Item('One'));

dictionary.getByIndex(0).name = 'Changed';

alert(dictionary.getByIndex(0).name);
alert(dictionary.getByKey('a').name);

答案 1 :(得分:3)

在basarat的TypeScript Collections lib

中进行一次眩晕

如果您正在使用0.9.0,则需要进行一些小修复,但这很好。

答案 2 :(得分:1)

对象(您正在使用的对象)之间存在差异。对象属性未编入索引。即您添加的第一个元素不一定在第一个内存位置。所以你不能这样做。如果您想要这样的功能,请使用数组而不是字典对象。