在Typescript中使用具有初始化值的Map构造函数

时间:2016-09-29 15:14:43

标签: typescript

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。假设此问题有Optionid2, 10, 34changeOptions个实例,我希望这些实例成为Map var option = []; ... option = dvSheet.getSheetValues(3,startCol,colLength,1);

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开始。这就是传递给地图构造函数的内容。