在(typescript)

时间:2017-10-01 15:46:31

标签: javascript typescript interface

我很擅长输入脚本和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()

无效。

使这项工作的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:0)

An Object is not a Map。您需要自己在ObjectMap之间进行转换:

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的数据模型之间进行转换。希望有所帮助;祝你好运!