javascript - 如何基于接口(interface)TypeScript创建对象?

标签 javascript typescript typescript2.0

我在 TypeScript 中有以下界面:

export interface Defined {
   4475355962119: number[];
   4475355962674: number[];
}

我需要基于这个接口(interface)定义创建对象:

let defined = new Defined();
defined['4475355962119'] = [1];
defined['4475355962674'] = [2];

但这对我不起作用!

或者可能应该是这样的:

 export interface Defined {
      array(number): number[];
}

我有这个 JSON 对象,我需要创建 JS 对象:

  "parameters": {
    "defined": {
      4475355962119: [
      9547,
      9871
      ],
      4475355962674: [
      9829
      ]
    }
  }

最佳答案

让我们从一个有效的 JSON 字符串开始:

const data = `{
    "parameters": {
    "defined": {
      "4475355962119": [9547,9871],
      "4475355962674": [9829]
    }
  }
}`;

界面

如果我们想将其表示为一个接口(interface),则思考过程是保留所有键,并用它们各自的类型替换任何值,如下所示:

interface Data {
    parameters: {
        defined: {
            [index: number]: number[];
        }
    }
}

然后我们可以将数据反序列化为该类型:

const result = <Data>JSON.parse(data);

并仅获取“已定义”位:

const defined = result.parameters.defined;

完整示例

这是一个完整的示例:

const data = `{
    "parameters": {
    "defined": {
      "4475355962119": [9547,9871],
      "4475355962674": [9829]
    }
  }
}`;

interface Data {
    parameters: {
        defined: {
            [index: number]: number[];
        }
    }
}

const result = <Data>JSON.parse(data);

alert(result.parameters.defined['4475355962674'][0]); // 9829

创建数据

如果您不反序列化数据,您可以自己创建它。类型注释将帮助您创建正确的对象。

const example: Data = {
    parameters: {
        defined: {
            '4475355962674': [0, 2, 3]
        }
    }
};

example.parameters.defined['4475355962674'][3] = 4;

关于javascript - 如何基于接口(interface)TypeScript创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664406/

相关文章:

javascript - Typescript strictNullChecks 跨函数检查

typescript - Typescript 中的接口(interface)有什么区别?

JavaScript:解析来自 GitHub API 的 JSONP 回调响应

javascript - 如何为不同部分触发不同模态

typescript - 递归类型在 emit 声明后变为 any,需要隐式解决

单个序列中的 Angular、ngrx/store、store select 和异步调用

javascript - Angular :未知 'null !' 语法

javascript - 当鼠标悬停在特定 div 上时,如何添加包含消息的新 div?

typescript - 当 T 扩展 U 时,为什么我不能将 U 分配给 Partial<T>?

visual-studio - Visual Studio 2017 不读取 tsconfig.json