我很擅长输入脚本和java脚本。
我的问题是: 我有一个界面,其中一个属性是Map。
我有一个与界面结构相同的json对象,当其中一个条目是另一个对象时。我试图将json对象分配给接口的变量,但是当我尝试使用Map函数时,它说这些函数不存在。
可能是因为Map未初始化。
例如,这是json对象:
let obj =
{
firstArg: "first"
secondArg: {one: 1, two: 2}
}
这是界面:
interface example {
firstArg: string,
secondArg: Map<string , number>
}
做:
let exm: example = obj;
exm.secondArg.values().next()
无效。
使这项工作的最佳解决方案是什么?
答案 0 :(得分:0)
An Object
is not a Map
。您需要自己在Object
和Map
之间进行转换:
function objectToMap<K extends string, V>(obj: Record<K,V>): Map<K, V> {
// return new Map(Object.entries(obj));
const map = new Map<K, V>();
Object.keys(obj).forEach((k:K) => map.set(k, obj[k]));
return map;
}
function mapToObject<K extends string, V>(map: Map<K, V>): Record<K, V> {
const obj = {} as Record<K, V>;
map.forEach((v, k) => { obj[k] = v; });
return obj;
}
所以你可以这样做:
let obj =
{
firstArg: "first",
secondArg: objectToMap({ one: 1, two: 2 })
}
let exm: example = obj; // works now
exm.secondArg.values().next()
使用objectToMap()
和mapToObject()
之类的内容,您需要编写代码,在您获取/发送的JSON与包含Map
的数据模型之间进行转换。希望有所帮助;祝你好运!