我有一个数组,如:
const myArray = [['key1', 'value1'], ['key2', 'value2']];
Run Code Online (Sandbox Code Playgroud)
我想从 myArray 创建 Map (在 TypeScript 中,在 JS 中工作正常)。
这不起作用:
const myMap = new Map(myArray);
Run Code Online (Sandbox Code Playgroud)
错误:
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]>'.
...
Run Code Online (Sandbox Code Playgroud)
但是,这有效:
const myMap = new Map([['key1', 'value1'], ['key2', 'value2']]);
Run Code Online (Sandbox Code Playgroud)
打字稿自动推断的类型myArray为:
string[][]
Run Code Online (Sandbox Code Playgroud)
但是 Map 构造函数只接受包含正好两个项的数组的可迭代对象。
您可以定义myArrayasconst以便 TS 不会自动将类型从“2 个字符串的数组数组”扩展为“字符串数组的数组”:
const myArray = [['key1', 'value1'], ['key2', 'value2']] as const;
Run Code Online (Sandbox Code Playgroud)
另一种方式,对于不支持的旧版本 TS as const(在 3.4 中引入):
const myArray: Array<[string, string]> = [['key1', 'value1'], ['key2', 'value2']];
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要完全保留键/值:
const myArray = [['key1', 'value1'] as ['key1', 'value1'], ['key2', 'value2'] as ['key2', 'value2']];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |