Website-Suche

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.