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>;
我定义了一个类型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
x 1 m8n1x中的number
键是域中其他对象的标识符。
假设我有一个定义如下的Option类
class Option {
id: number;
name: string;
}
给定Option
示例的id
将是changeOptions
Map
的键。基于域的业务规则,存在有限的预定义Options
集合。对于此问题,假设有3个Option
示例,其id
值为2, 10, 34
,所以我希望这些是changeOptions
Map
的键
2条答案
按热度按时间m528fe3b1#
这些数字是从哪里来的?它们仅仅是基于数组的顺序吗?
如果是的话...
实际上,您不再需要
<number, ChangeMap>
,因为由于as [number, ChangeMap]
,该表达式最终成为Array<[number, ChangeMap]>
,但拥有它并没有什么坏处,而且它对文档很有好处。分解一下:如果我们想要有一个可迭代的更改集传递到map构造函数中,我们需要将它们存储在一个集合中。这就是上面的changeMaps,
...
是供您按照自己的意愿填写的。只有一个项的朴素形式就是[changeMap]
。然后我们将该集合Map到元组集合,包括索引。我使用i+1
是因为看起来你想从数字1开始。这就是传入map构造函数的内容。fcg9iug32#
语法为: