Lets say I have an array of key value objects:
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())
How do I convert it to ES 6 map? It works in JavaScript but TypeScript will complain. Here I got the error of Argument of type 'IterableIterator<string[]>' is not assignable to parameter of type 'ReadonlyArray<[string, string]>'.
Property 'length' is missing in type 'IterableIterator<string[]>'.
Lets say I have an array of key value objects:
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())
How do I convert it to ES 6 map? It works in JavaScript but TypeScript will complain. Here I got the error of Argument of type 'IterableIterator<string[]>' is not assignable to parameter of type 'ReadonlyArray<[string, string]>'.
Property 'length' is missing in type 'IterableIterator<string[]>'.
1 Answer
Reset to default 15You need to do type assertion
and tell typescript that your mappedData
is of type Array<[string,string]>
instead of string[][]
which is a sub type for Array<[any,any]>
as needed by Map
constructor.
Do
const mappedData = data.map(x => [x.key, x.value] as [string, string]);
instead of
const mappedData = data.map(x => [x.key, x.value]);
and also
drop the values()
call as pointed out in comments.
.values()
call – dotconnor Commented Nov 27, 2018 at 4:07Argument of type 'string[][]' is not assignable to parameter of type 'ReadonlyArray<[string, string]>'. Type 'string[]' is not assignable to type '[string, string]'. Property '0' is missing in type 'string[]'.
– Cerlancism Commented Nov 27, 2018 at 4:08const ES6Map = new Map(mappedData)
? – ba_ul Commented Nov 27, 2018 at 4:13