web-dev-qa-db-ja.com

TypeScriptマップ:強い型を使用する方法?

MapオブジェクトをTypeScript 1.8.10で強くタイプするのに問題があります。 Mapインターフェイスを定義するcore-jsからの抜粋を次に示します。

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; }>'をスローします。タイプスクリプトでES6 Mapオブジェクトを使用するときに、強い型付けを利用する方法はありますか?

11
BeetleJuice

作成された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}>();
14
zlumer