我的回复类型如下:
interface IDictionaryKey {
text: string;
}
let data = response<IDictionaryKey>[];
是否可以对new Map()
设置整个响应?
类似的东西:
dictionary = new Map<IDictionaryKey[]>();
答案 0 :(得分:1)
您可以将整个响应设置为new Map()
。我看到以下选项:
完整响应数组将转到Map
的单个元素。如果您要接收类型为IDictionaryKey[]
的其他响应并将其存储在dictionary
中,则这很有用。 (例如reponse2
,response3
等)。
let data: IDictionaryKey[] = response<IDictionaryKey>[];
let dictionary = new Map<string, IDictionaryKey[]>();
dictionary.set("response1", data);
// Now you can retriev first response by
let response1 = dictionary.get("response1");
响应数组的每个元素都将转到Map
的单个元素。这是一个问题。 IDictionaryKey
接口仅包含一个属性text
。为了使Map
有用,最好至少具有两个属性,一个是键,另一个是-值。但是IDictionaryKey
甚至可以具有一个属性,也可以放在Map
中。
let data: IDictionaryKey[] = response<IDictionaryKey>[];
let dictionary = new Map<IDictionaryKey, any>();
data.forEach(d => dictionary.set(d, "" as any));
// As a result, Map will have only keys. All values will be empty strings
// Now you can retrive element by
let elem: IDictionaryKey = {text: "something"};
let dictionaryElement = dictionary.get(elem);
// dictionaryElement will always be either "" or undefined
当然,您可以使用data
数组以不同的方式将其添加到Map
中。例如
let dictionary = new Map<string, IDictionaryKey>();
data.forEach(d => dictionary.set(d.text, d));
// And get each element from Map only by text property
let dictionaryElement: IDictionaryKey = dictionary.get("MyText");
最后一条提示。 Map
具有构造函数,因此可以在构造过程中填充Map
。
let dictionary = new Map<IDictionaryKey, any>(data.map<[IDictionaryKey, any]>(d => [d, "" as any]));