2016-06-18 4 views
11

私はtypescript 1.8.10で私のMapオブジェクトを強く入力することに問題があります。ここではMapインタフェースを定義するcore-jsからの抜粋は以下のとおりです。TypeScriptマップ:強い型の使い方?

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

私は、文字列のキーを使用してしか形状{name:string,price:number}に値を格納するマップを作成します。私はオブジェクトを宣言しようとしました:

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

しかし、コンパイラはエラーTS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'をスローします。 typescriptでES6 Mapオブジェクトを使用しているときに強いタイピングを利用する方法はありますか?

+0

{name:string、price:number}のインタフェースを定義するために – alexeibs

+0

私はそうするでしょう。それは、ここで私を助けなかったでしょう:エラーは、割り当ての右の兆候( '新しいマップ'の隣)にタイプがなかったために引き起こされました。 – BeetleJuice

答えて

14

あなたはそのように作成Mapにジェネリック型の情報を提供する必要があります。

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

その後、あなたはコンパイラに仕事を残して、型宣言を省略することができます。私はそれが良いことだと思う

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