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
オブジェクトを使用するときに、強い型付けを利用する方法はありますか?
作成された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}>();