TypeScript Карта: как использовать сильные типы?

У меня возникли проблемы с сильной печатью объектов Map с помощью typescript 1.8.10. Вот отрывок из 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 объектов в typescript?

Ответ 1

Вам необходимо предоставить информацию об общих типах созданным 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}>();