使用模型实现扩展地图

extending map with a model implementation

我有一个休息电话 json 响应如下:

"20412": [
  {
    "username": "foo",
    ...
  },
  ...
],
"20485": [
  ...

其中数组中的对象是 User 模型。

我正在尝试为此 json 创建一个界面,我可以在其中做 assetUsers.get("20412") 并让用户处于该界面之下。

我简单地试过了:

export interface AssetUsers extends Map<string, User[]> {}

但是(当尝试使用与上述类似的 json 创建模拟 AssetUsers 对象时)这给了我一个“不可分配”错误,指出 20412 在 AssetUsers 类型中不存在。

Simplified example:

export interface User {
    username: string;
}
export interface AssetUsers extends Map<string, User[]> { }

const mockAssetUsers: AssetUsers = {
    "204311":[
        {
            "username":"foo",
        },
        {
            "username":"bar",
        },
    ],
    "204832":[
        {
            "username":"bob",
        },
        {
            "username":"baz",
        },
    ],
}

如何为这个 json 创建一个模型接口?

不是接口,但您可以声明类型:

type AssetUsers = Map<string, User[]>;

get() 方法 returns Map 对象中的指定元素,JSON 对象没有 get() 方法,您也不能将 map 接口分配给 JSON对象。

export interface User {
  username: string;
}
export interface AssetUsers extends Map<string, User[]> {}
const mockAssetUsers: AssetUsers = new Map();

mockAssetUsers.set("204311", [
  {
    username: "foo",
  },
  {
    username: "bar",
  },
]);

mockAssetUsers.set("204832", [
  {
    username: "bob",
  },
  {
    username: "baz",
  },
]);

console.log(mockAssetUsers.get("20411"));

P.S 也许这是相关的,但这样做不会让您使用 get() 方法。

const mockAssetUsers: {[key: string]: User[]}