TypeScript Zugriff auf ein Wörterbuchtyp-Objekt
Ich brauche eine Art Wörterbuch in meiner Klasse (ich bin mir nicht sicher, wie dieses Objekt genannt wird), ich benutze dies:
inputCollection: { [name: string]: HTMLInputElement };
Ich kann Werte folgendermaßen abrufen und setzen:
this.inputCollection['inputId']=document.getElementById('inputId');
Ich möchte auf mein Wörterbuch auf folgende Weise zugreifen, um das erste Element zu erhalten
this.inputCollection[0]
Wie könnte ich das leicht erreichen?
Antwort #1
Wenn Sie Gegenstände entweder mit einem String oder einem Index erhalten möchten, müssen Sie ein Dictionary implementieren. Es gibt keine Framework-Klassenbibliothek für TypeScript, also bekommen Sie dies nicht kostenlos - nur die Sprachfunktionen, um eines zu erstellen.
Technisch gesehen können Sie sowohl Zeichenketten- als auch Zahlenindexierer verwenden, aber das erste Zeichenkettenelement ist nicht dasselbe wie das erste Zahlenelement. Beispiel:
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
Hier ist eine wirklich grundlegende Dictionary-Klasse.
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);
Das funktioniert auch, wenn Sie einen Artikel ändern...
dictionary.add('a', new Item('One'));
dictionary.getByIndex(0).name = 'Changed';
alert(dictionary.getByIndex(0).name);
alert(dictionary.getByKey('a').name);
Antwort #2
Schau dir basarats TypeScript Collections-Bibliothek an
Wenn Sie an Version 0.9.0 arbeiten, müssen Sie ein paar kleine Korrekturen vornehmen, aber es ist gut.
