Two dimensional array passed to new Map fails in typescript

Viewed 598

Can't pass two dimensional array to new Map in Typescript:

 const myArray: string[][] = [['DE', 'Germany'], ['AU', 'Austria']];
 const myMap = new Map(myArray);

Fails to me with TS2769: No overload matches this call. Am I doing something wrong here?

TS Version 3.9.9

1 Answers

If you dig through the log, you'll see an error message of

Target requires 2 element(s) but source may have fewer.

The problem is that ['DE', 'Germany'] gets automatically type-widened to string[] - an array of strings, which may have two elements, or one, or zero - but the Map constructor requires such entry arrays to have at least 2 elements. The type information that the number of items in the array is 2 gets lost.

I'd put the array declaration on the same line as the new Map:

const myMap = new Map([['DE', 'Germany'], ['AU', 'Austria']]);

Another option is

const arr: [string, string][] = [['DE', 'Germany'], ['AU', 'Austria']];

to show that the array actually does have 2 items in it.

Also note that you can't have a variable name start with a number - start it with something else, probably a letter.

Related