Javascript 是否可以定义包含对象的对象?

Javascript 是否可以定义包含对象的对象?,javascript,typescript,Javascript,Typescript,我有一个目标: var a = { "1":{"topicId":1, "subTopicId":1, "topicName":"x", "subTopicName":"x"}, "2":{"topicId":1, "subTopicId":2, "topicName":"x", "subTopicName":"x"}, "62":{"topicId":10, "subTopicId":62,

我有一个目标:

var a = {
 "1":{"topicId":1,
      "subTopicId":1,
      "topicName":"x",
      "subTopicName":"x"},
 "2":{"topicId":1,
      "subTopicId":2,
      "topicName":"x",
      "subTopicName":"x"},
 "62":{"topicId":10,
       "subTopicId":62,
       "topicName":"x",
       "subTopicName":"x"}
}
我意识到我可以像这样定义内部对象:

interface IData {
    topicId: number;
    subTopicId: number;
    topicName: string;
    subTopicName; string;
}

但是有没有一种方法可以定义可以有任意数量的IData对象的整个对象呢?

哎呀,忽略了
typescript
标签。。有关解析JSON(可能是服务器输出的、从配置文件中读取的)的方法,请参阅备选答案。以下是如何在纯javascript中实现这一点:

在对象内使用数组属性

然后将每个数组元素设置为IData对象的一个实例

var a = { Topics: [] }; // define container with empty Topics array

// add some topics
a.Topics[1] = { topicId: 1, subTopicId: 1, topicName: "x", subTopicName: "x" };
a.Topics[2] = { topicId: 1, subTopicId: 2, topicName: "x", subTopicName: "x" };
a.Topics[62] = { topicId: 10, subTopicId: 62, topicName: "x", subTopicName: "x" };
然后访问以下对象:

interface IData {
    topicId: number;
    subTopicId: number;
    topicName: string;
    subTopicName; string;
}

alert(a.Topics[1].topicName+“-”+a.Topics[1].subTopicName)

如果JSON包含“stringId”(例如“1”、“2”)作为标识符,我们可以将该对象定义为字典(请参见):

接口数据
{
topicId:编号;
副标题:编号;
主题名称:字符串;
子主题名称;字符串;
}
//具有字符串类型键的IDictionary
//和IData类型的值
接口IDataSet
{
[键:字符串]:IData;
} 
变量源=
“{”1:{“主题ID”:1,“子主题ID”:1,“主题名称”:“x”,“子主题名称”:“x”},”+
““2”:{“主题ID”:1,“副主题ID”:2,“主题名称”:“x”,“副主题名称”:“x”},”+
““62”:{“主题ID”:10,“副主题ID”:62,“主题名称”:“x”,“副主题名称”:“x”}”+
'}';
var a=JSON.parse(源代码);
for(a中的var键)
{
var elm=document.createElement('div');
elm.innerText=“key:+key+”,topicId:+a[key].topicId
文件.正文.附件(elm);
}

选中此选项(单击run,查看结果)

,它可以有任意数量的IData对象:听起来您想要一个。