J'ai du mal à taper mes objets Map
avec TypeScript 1.8.10
. Voici un extrait de core-js
définissant l'interface de la carte:
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;
}
Je veux créer une carte qui utilise des clés de chaîne et ne stocke que des valeurs avec la forme {name:string,price:number}
. J'ai essayé de déclarer mon objet avec:
let oMap:Map<string,{name:string,price:number}> = new Map();
Cependant, le compilateur renvoie une erreur TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'
. Existe-t-il un moyen de tirer parti de la frappe forte lorsque vous utilisez des objets ES6 Map
dans un scriptus?
Vous devez fournir des informations de types génériques au Map
créé comme ceci:
let oMap:Map<string,{name:string,price:number}> = new Map<string,{name:string,price:number}>();
Et après cela, vous pouvez omettre la déclaration de type, laissant le travail au compilateur:
// oMap is correctly inferred to be Map<string,{name:string,price:number}>
let oMap = new Map<string,{name:string,price:number}>();