2016-06-18 23 views
11

Sto riscontrando problemi nella digitazione degli oggetti Map con typescript 1.8.10. Ecco un estratto dal core-js definire l'interfaccia Map:Mappa TypeScript: come usare i tipi forti?

interface Map<K, V> { 
    clear(): void; 
    delete(key: K): boolean; 
    forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void; 
    get(key: K): V; 
    has(key: K): boolean; 
    set(key: K, value?: V): Map<K, V>; 
    size: number; 
} 

Voglio creare una mappa che utilizza chiavi di stringa e sempre e solo memorizza i valori con la forma {name:string,price:number}. Ho provato a dichiarare il mio oggetto con:

let oMap:Map<string,{name:string,price:number}> = new Map(); 

Tuttavia, il compilatore genera un errore TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'. C'è un modo per sfruttare la tipizzazione quando si utilizzano gli oggetti ES6 Map in dattiloscritto?

+0

Penso che sia meglio per definire un'interfaccia per {name: string, price: number} – alexeibs

+0

In genere lo farei. Non mi avrebbe aiutato qui: l'errore è stato attivato perché non c'era alcun tipo sul segno giusto del compito (accanto a 'nuova mappa'). – BeetleJuice

risposta

14

È necessario fornire generiche informazioni tipi al creato Map così:

let oMap:Map<string,{name:string,price:number}> = new Map<string,{name:string,price:number}>(); 

E dopo che si può omettere dichiarazione del tipo, lasciando il compito di compilatore:

// oMap is correctly inferred to be Map<string,{name:string,price:number}> 
let oMap = new Map<string,{name:string,price:number}>(); 
Problemi correlati