使用地图的构造中打字稿与初始化值
的地图类型定义如下使用地图的构造中打字稿与初始化值
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>;
我有一个类型,我定义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的问题,在changeOptions
Map
的number
键用于域中的其他对象标识符。
假设我有一个类定义的选项,如下所示
class Option {
id: number;
name: string;
}
给定Option
实例的id
是为changeOptions
Map
的关键。根据域的业务规则,有限的预定义集合Options
。假设对于该问题有3分Option
与2, 10, 34
id
值的情况下,所以我想这些是的changeOptions
Map
哪里的数据来自钥匙?他们只是基于数组的订单吗?
如果是这样......
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]
但它不会伤害有和它的良好的文档。
分解:如果我们想要一组迭代的变化传入地图构造函数,我们需要将它们存储在一个集合中。这是changeMaps以上,...
是给你填写你想要的。一个项目的天真形式只是[changeMap]
。然后我们将这个集合映射到一系列元组,包括索引。我使用i+1
,因为它看起来像你想从数字1开始。这就是传递给地图构造函数的东西。
我不能使用自动递增索引,如我在问题中编辑#1所述 – seangwright
数字(您设置的电话中的第一个参数)来自哪里? – Paarth
@Paarth“changeOptions”Map“的数字键是域中其他对象的ID。根据该ID我想要使用不同的'ChangeMap' – seangwright