2016-06-18 5 views
11

Mam problemy z silnym wpisywaniem obiektów Map za pomocą typescript 1.8.10. Oto fragment z core-js zdefiniowanie interfejsu mapy:TypeScript Map: jak używać silnych typów?

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; 
} 

Chcę utworzyć mapę, która używa klawiszy ciągów i zawsze tylko przechowuje wartości z kształtem {name:string,price:number}. Próbowałem deklarowania mojego obiektu z:

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

Jednak kompilator zgłasza błąd TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'. Czy istnieje sposób na wykorzystanie silnego pisania podczas używania obiektów maszynowych ES6 Map w maszynopisie?

+0

myślę, że lepiej aby zdefiniować interfejs dla {nazwa: ciąg znaków, cena: numer} – alexeibs

+0

Zwykle robiłbym to. Nie pomogłoby mi tutaj: błąd został wywołany, ponieważ nie było typu na prawym znaku przydziału (obok "nowej mapy"). – BeetleJuice

Odpowiedz

14

Musisz podać ogólne informacje typy do stworzonego Map tak:

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

I po tym można pominąć deklarację typu, pozostawiając zadanie kompilatora:

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