Ich habe JavaScript-Code, der Objekte als Wörterbücher verwendet. Beispielsweise enthält ein "Personen" -Objekt einige persönliche Daten, die von der E-Mail-Adresse eingegeben wurden.
var people = {<email> : <'some personal data'>};
adding > "people[<email>] = <data>;"
getting > "var data = people[<email>];"
deleting > "delete people[<email>];"
Ist es möglich, dies in Typescript zu beschreiben? oder muss ich ein Array verwenden?
arrays
object
dictionary
typescript
Robert Taylor
quelle
quelle
Antworten:
In neueren Versionen von Typoskript können Sie Folgendes verwenden:
In älteren Versionen können Sie verwenden:
Sie können auch eine Schnittstelle erstellen, wenn Sie nicht jedes Mal die gesamte Typanmerkung eingeben möchten:
quelle
map
zwei Mitglieder enthält: (<any> Object.prototype) .something = function () {}; Klasse Kunde {} var map: {[email: string]: Kunde; } = {}; map ['[email protected] '] = neuer Kunde (); für (var i in map) {console.log (map [i])}var map:MapStringTo<Customer> = {};
Zusätzlich zur Bereitstellung einer map- zu verwenden wie Objekt, ein tatsächliches war
Map
Gegenstand einiger Zeit, die in Typoskript zur Verfügung steht , wenn sie ES6 kompilieren oder wenn eine polyfill mit den ES6 mit Typ-Definitionen :Es unterstützt die gleiche Funktionalität
Object
und mehr mit einer etwas anderen Syntax:Dies allein hat mehrere Vorteile gegenüber einer map- mit wie Objekt, wie zum Beispiel:
Object
keine unterstützt wird (nein,Object
unterstützt keine Zahlen, konvertiert sie in Zeichenfolgen)--noImplicitAny
, da aMap
immer einen Schlüsseltyp und einen Werttyp hat , während ein Objekt möglicherweise keine Indexsignatur hatObject
Darüber hinaus bietet ein
Map
Objekt eine leistungsfähigere und elegantere API für allgemeine Aufgaben, von denen die meisten nicht über einfacheObject
s verfügbar sind, ohne die Hilfsfunktionen zu hacken (obwohl einige davon einen vollständigen ES6-Iterator / eine iterierbare Polyfüllung für ES5-Ziele oder weniger erfordern):quelle
JSON.stringify()
, so dass es zB für socket.io verwendet werden kann :(Map
Serialisierung ist ziemlich lustig. Zum einen führe ich vor der Serialisierung eine Konvertierung in Schlüssel-Wert-Paar-Objekte durch und dann zurück (z{ key: "John", value: { firstName: "John" } }
. B. Objekt von ).Sie können folgende Vorlagenschnittstellen verwenden:
quelle
let dict: Dictionary<number> = { "one": 1, "two": 2 };
Sie können den Datensatztyp auch in Typoskript verwenden:
quelle
Lodash hat eine einfache Dictionary-Implementierung und eine gute TypeScript-Unterstützung
Installieren Sie Lodash:
Import und Verwendung:
quelle
Sie können dafür verwenden
Record
:https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
Beispiel (Eine Zuordnung zwischen AppointmentStatus-Enum und einigen Metadaten):
Jetzt mit Schnittstelle als Wert:
interface Icon { Name: string Color: string }
Verwendungszweck:
const icon: SemanticIcon = iconMapping[appointment.Status]
quelle
enum
oder einclass/object
for verwendenAppointmentStatus
- oder spielt es eine Rolle?Es gibt eine Bibliothek, die stark typisierte, abfragbare Sammlungen in Typoskript bereitstellt .
Die Sammlungen sind:
Die Bibliothek heißt ts-generic-collection . ( Quellcode auf GitHub )
Sie können ein Wörterbuch erstellen und wie folgt abfragen:
quelle