+-
如何从键值对数组中初始化Map?

我有一个数组,像。

const myArray = [['key1', 'value1'], ['key2', 'value2']];

我想从myArray中创建Map(在TypeScript中,在JS中工作得很好)。

这不工作。

const myMap = new Map(myArray);

Error:

No overload matches this call.
  Overload 1 of 3, '(iterable: Iterable<readonly [unknown, unknown]>): Map<unknown, unknown>', gave the following error.
    Argument of type 'string[][]' is not assignable to parameter of type 'Iterable<readonly [unknown, unknown]>'.
...

但是,这个工作。

const myMap = new Map([['key1', 'value1'], ['key2', 'value2']]);
6
投票

Typescript会自动推导出 myArray 为。

string[][]

但地图构造函数 只是 接受包含以下数组的iterables。两件.

你可以定义 myArray 作为 const 这样TS就不会自动将类型从 "一个由2个字符串组成的数组 "扩大到 "一个由字符串组成的数组"。

const myArray = [['key1', 'value1'], ['key2', 'value2']] as const;

另一种方法,对于不支持TS的旧版本来说 as const (这是在3.4中引入的)。

const myArray: Array<[string, string]> = [['key1', 'value1'], ['key2', 'value2']];

或者,如果你需要准确地保留键值,

const myArray = [['key1', 'value1'] as ['key1', 'value1'], ['key2', 'value2'] as ['key2', 'value2']];