我的班级需要一种字典(我不确定是否调用了这种对象),我正在使用这个:
inputCollection: { [name: string]: HTMLInputElement };
我可以像这样获取和设置值:
this.inputCollection['inputId'] = document.getElementById('inputId');
我想以下列方式访问我的字典,以获取第一个元素
this.inputCollection[0]
我怎么能轻松做到这一点?
我的班级需要一种字典(我不确定是否调用了这种对象),我正在使用这个:
inputCollection: { [name: string]: HTMLInputElement };
我可以像这样获取和设置值:
this.inputCollection['inputId'] = document.getElementById('inputId');
我想以下列方式访问我的字典,以获取第一个元素
this.inputCollection[0]
我怎么能轻松做到这一点?
如果要使用字符串或索引获取项目,则必须实现 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
这是一个非常基本的 Dictionary 类。
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);
在 basarat 的TypeScript Collections 库中小试一下
如果您正在使用 0.9.0,则需要进行一些小修复,但这很好。
数组和对象之间存在差异(您正在使用什么)。对象属性未编入索引。即您添加的第一个元素不一定在第一个内存位置。所以你不能那样做。如果您想要这样的功能,请使用数组而不是字典对象。