Map的类型定义如下
interface MapConstructor {
new <K, V>(): Map<K, V>;
new <K, V>(iterable: IterableShim<[K, V]>): Map<K, V>;
prototype: Map<any, any>;
}
我想使用第二个构造函数new <K, V>(iterable: IterableShim<[K, V]>): Map<K, V>;
我有一个类型I已定义type ChangeMap = { [key: string]: Array<string> };
,其使用如下
let changeMap: ChangeMap = { A: ["Car", "Boat"], B: ["Plane", "Rocket"] };
我想创建一个Map<number, ChangeMap>
,我可以轻松地做到这一点,但我对于如何构建我希望用
Map
的数据感到困惑。
public changeOptions = new Map<number, ChangeMap>( ... what goes here ... ?)
这是可能的,还是我需要在没有值的情况下初始化Map
,然后致电changeOptions.set(1, changeMap);
给它值?
---编辑#1
要回答下面的@ Paarth的问题,number
changeOptions
中的Map
个键是域中其他对象的标识符。
假设我有一个Option类定义如下
class Option {
id: number;
name: string;
}
给定id
个实例的Option
将是changeOptions
Map
的关键。根据域的业务规则,有一组有限的预定义Options
。假设此问题有Option
个id
个2, 10, 34
个changeOptions
个实例,我希望这些实例成为Map
var option = [];
...
option = dvSheet.getSheetValues(3,startCol,colLength,1);
答案 0 :(得分:2)
这些数字来自哪里?它们只是基于数组的订单吗?
如果是这样......
let changeMaps = ...
public changeOptions = new Map<number, ChangeMap>(changeMaps.map((v,i) => [i+1,v] as [number, ChangeMap]));
你实际上不再需要<number, ChangeMap>
,因为Array<[number, ChangeMap]>
表达式最终为as [number, ChangeMap]
,但是它并没有伤害它#39;有利于文档。
分解:如果我们想要一组可迭代的更改传递给地图构造函数,我们需要将它们存储在一个集合中。这个改变在上面,...
是你填写你想要的。包含一个项目的天真形式只是[changeMap]
。然后,我们将该集合映射到元组的集合,包括索引。我使用了i+1
,因为看起来你想要从数字1开始。这就是传递给地图构造函数的内容。