web-dev-qa-db-fra.com

Carte TypeScript: comment utiliser des types forts?

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?

11
BeetleJuice

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}>();
14
zlumer