BEARBEITEN (5. Juni 2019): Während die Idee, dass "TypeScript Map
nativ unterstützt ", immer noch wahr ist, unterstützt TypeScript in Version 2.1 etwas, das so genannt wird Record
.
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
Leider wird der erste generische Parameter (Schlüsseltyp) immer noch nicht vollständig berücksichtigt: Selbst bei einem string
Typ ist so etwas wie peopleA[0]
(a number
) immer noch gültig.
BEARBEITEN (25. April 2016): Die Antwort unten ist alt und sollte nicht als die beste Antwort angesehen werden. TypeScript unterstützt Maps jetzt "nativ", sodass ES6-Maps einfach verwendet werden können, wenn die Ausgabe ES6 ist. Für ES5 werden keine Polyfills bereitgestellt. Sie müssen sie selbst einbetten.
Weitere Informationen finden Sie in der Antwort von mohamed hegazy unten, um eine modernere Antwort zu erhalten, oder sogar in diesem reddit-Kommentar für eine Kurzversion.
Ab der Beta-Version 1.5.0 unterstützt TypeScript Maps noch nicht . Es ist auch noch nicht Teil der Roadmap .
Die derzeit beste Lösung ist ein Objekt mit eingegebenem Schlüssel und Wert (manchmal auch als Hashmap bezeichnet). Für ein Objekt mit Schlüsseln vom Typ string
und Werten vom Typ number
:
var arr : { [key:string]:number; } = {};
Einige Einschränkungen jedoch:
- Schlüssel können nur vom Typ
string
oder seinnumber
- Es spielt eigentlich keine Rolle, was Sie als Schlüsseltyp verwenden, da Zahlen / Zeichenfolgen immer noch austauschbar akzeptiert werden (nur der Wert wird erzwungen).
Mit dem obigen Beispiel:
// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too
// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value