2016-09-29 4 views
3

Die Typdefinition für Karte wird wie folgtUse Map Konstruktor in Typoskript mit initialisierten Werte

interface MapConstructor { 
    new <K, V>(): Map<K, V>; 
    new <K, V>(iterable: IterableShim<[K, V]>): Map<K, V>; 
    prototype: Map<any, any>; 
} 

ich den zweiten Konstruktor new <K, V>(iterable: IterableShim<[K, V]>): Map<K, V>;

Ich habe ein Typ-I definiert haben type ChangeMap = { [key: string]: Array<string> }; verwenden möchten, die verwendet wird als

let changeMap: ChangeMap = { A: ["Car", "Boat"], B: ["Plane", "Rocket"] }; 

folgt möchte ich eine Map<number, ChangeMap> schaffen, die ich leicht genug tun kann, aber ich bin fest, wie das zu strukturieren Daten, die ich meine Map mit

public changeOptions = new Map<number, ChangeMap>(... what goes here ... ?) 

Ist das möglich initialisiert werden soll oder muss ich meine Map ohne Werte initialisieren und dann changeOptions.set(1, changeMap); nennen es Werte zu geben?

--- EDIT # 1

zu beantworten @ unter Paarth Frage, die number Schlüssel in den changeOptionsMap sind Kennungen für andere Objekte in der Domäne.

Angenommen ich eine Klasse von Option haben, definiert als

folgt
class Option { 
    id: number; 
    name: string; 
} 

Die id einer gegebenen Option Instanz der Schlüssel für die changeOptionsMap wäre. Es gibt einen begrenzten vordefinierten Satz von Options basierend auf Geschäftsregeln für die Domäne. Nehmen wir für diese Frage gibt es 3 Option Instanzen mit id Werte von 2, 10, 34, so möchte ich diejenigen, die Schlüssel des changeOptionsMap

+1

Woher kommen die Nummern (erster Parameter in Ihrem Anruf)? – Paarth

+0

@Paarth Die Zifferntasten für die 'changeOptions' 'Map' sind IDs für andere Objekte in der Domäne. Abhängig von dieser ID möchte ich eine andere 'ChangeMap' verwenden – seangwright

Antwort

1

sein Wo die Zahlen herkommen? Sind sie nur eine Bestellung basierend auf einem Array?

Wenn ja ...

let changeMaps = ... 

public changeOptions = new Map<number, ChangeMap>(changeMaps.map((v,i) => [i+1,v] as [number, ChangeMap])); 

Sie brauchen nicht wirklich die <number, ChangeMap> mehr, weil der Ausdruck der as [number, ChangeMap] als Array<[number, ChangeMap]> Dank landet aber es tut nicht weh zu haben, und es ist gut für die Dokumentation .

Aufschlüsselung: Wenn wir einen iterierbaren Satz von Änderungen an den Map-Konstruktor übergeben möchten, müssen wir sie in einer Sammlung speichern. Das ist changeMaps oben, die ... ist für Sie, um es zu füllen, wie Sie wünschen. Die naive Form mit einem Gegenstand ist nur [changeMap]. Wir ordnen diese Sammlung dann einer Sammlung von Tupeln zu, einschließlich der Indizes. Ich habe i+1 verwendet, weil es so aussah, als ob du mit der Nummer 1 anfangen wolltest. Das wird in den Map Constructor übernommen.

+0

Ich kann nicht automatisch inkrementierende Indizes verwenden, wie in EDIT # 1 in meiner Frage erklärt – seangwright

Verwandte Themen