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
values()
ich würdefor (var key in arr) ... arr[key]
oderfor...of
. Eine andere Lösung (die heutzutage immer realistischer ist und für eine Weile für viele Dinge gelten wird) ist die Verwendung von corejs .map Map<string,string>=new Map<string,string>()
wenn ich tuemap.set(something)
ich eine Ausnahme erhaltenmap is undefined
, gibt es eine andere Möglichkeit , es zu initialisieren?Siehe Kommentar in: https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
quelle
Hier ist ein Beispiel:
Demo
quelle
TS2304
überprüfen Sie bitte dies: stackoverflow.com/questions/39416691/…Ja, Map ist jetzt in Typoskript verfügbar. Wenn Sie in lib.es6.d.ts nachsehen, sehen Sie die Oberfläche:
Es ist großartig, es als Wörterbuch für Zeichenfolgen und Objektpaare zu verwenden. Das einzige Ärgernis ist, dass der IDE-ähnliche Code Ihnen Probleme gibt , wenn Sie es verwenden, um Werte an anderer Stelle mit Map.get (Schlüssel) zuzuweisen Erstellen einer Variablen mit einer definierten Prüfung. Geben Sie einfach den Typ um (vorausgesetzt, Sie wissen, dass die Karte das Schlüssel-Wert-Paar enthält).
quelle
Sie müssen zielen
--module es6
. Dies ist unglücklich und Sie können hier Ihre Bedenken äußern: https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111quelle
Als absolutes Minimum:
tsconfig:
und installieren Sie eine Polyfüllung wie https://github.com/zloirock/core-js, wenn Sie IE <11-Unterstützung wünschen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /Karte
quelle
Ich bin mir nicht sicher, ob dies offiziell ist, aber dies hat bei mir in Typoskript 2.7.1 funktioniert:
In einfachen Worten
Map<keyType, valueType>
quelle
Mit der Option lib config können Sie Map in Ihr Projekt aufnehmen. Fügen
es2015.collection
Sie einfach Ihren lib-Bereich hinzu. Wenn Sie keine lib-Konfiguration haben, fügen Sie eine mit den Standardeinstellungen hinzu und fügen Sie hinzues2015.collection
.Wenn Sie also das Ziel: es5 haben, ändern Sie tsconfig.json in:
quelle
Typescript wird noch nicht unterstützt
Map
.ES6-Kompatibilitätstabelle
quelle
Fügen Sie
"target": "ESNEXT"
dertsconfig.json
Datei eine Eigenschaft hinzu .quelle