javascript - TypeScript - Comment utiliser array map pour un Map ES6 ?


Disons que j'ai un tableau d'objets clé-valeur :

const data = [
    {key: "object1", value: "data1"},
    {key: "object2", value: "data2"},
    {key: "object3", value: "data3"},
]

const mappedData = data.map(x => [x.key, x.value]);

const ES6Map = new Map<string, string>(mappedData.values())

Comment puis-je le convertir en map ES 6 ? Ça fonctionne en JavaScript mais TypeScript va se plaindre. Ici, j'ai eu l'erreur suivante : Argument of type 'IterableIterator<string[]>' is not assignable to parameter of type 'ReadonlyArray<[string, string]>'. Property 'length' is missing in type 'IterableIterator<string[]>'.

Réponse #1

Vous devez effectuer une assertion de type et indiquer à typescript que votre mappedData est de type Array<[string,string]> au lieu de string[][] qui est un sous-type de Array<[any,any]> comme requis par le constructeur Map.

Faire

const mappedData = data.map(x => [x.key, x.value] as [string, string]);

au lieu de

const mappedData = data.map(x => [x.key, x.value]);

et aussi

supprimez l'appel values() comme indiqué dans les commentaires.