+-

我有一个数组,像。
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']];