我有这个对象:
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 对象的整个对象?
如果 JSON 包含“stringId”(例如“1”、“2”)作为标识符,我们可以将该对象定义为字典(see it here http://www.typescriptlang.org/Playground#src=interface%20IData%20%7B%0A%20%20%20%20topicId%3A%20number%3B%0A%20%20%20%20subTopicId%3A%20number%3B%0A%20%20%20%20topicName%3A%20string%3B%0A%20%20%20%20subTopicName%3B%20string%3B%0A%7D%0Ainterface%20IDataSet%0A%7B%0A%09%5Bkey%3A%20string%5D%20%3A%20IData%3B%0A%7D%20%0A%0Avar%20source%20%3D%20%0A'%7B%20%20%221%22%3A%7B%22topicId%22%3A1%2C%22subTopicId%22%3A1%2C%22topicName%22%3A%22x%22%2C%20%22subTopicName%22%3A%22x%22%7D%2C'%2B%0A'%20%20%20%222%22%3A%7B%22topicId%22%3A1%2C%22subTopicId%22%3A2%2C%22topicName%22%3A%22x%22%2C%22subTopicName%22%3A%22x%22%7D%2C'%2B%0A'%20%20%2262%22%3A%7B%22topicId%22%3A10%2C%20%22subTopicId%22%3A62%2C%22topicName%22%3A%22x%22%2C%22subTopicName%22%3A%22x%22%7D'%2B%0A'%7D'%3B%0A%0Avar%20a%20%3D%20%3CIDataSet%3EJSON.parse(source)%3B%0A%0Afor(var%20key%20in%20a)%0A%7B%0A%09var%20elm%20%3D%20document.createElement('div')%3B%0A%09elm.innerText%20%3D%20%22key%3A%20%22%20%2B%20key%20%2B%20%22%2C%20topicId%3A%20%22%20%2B%20a%5Bkey%5D.topicId%09%0A%20%20%20%20document.body.appendChild(elm)%3B%0A%7D):
interface IData
{
topicId: number;
subTopicId: number;
topicName: string;
subTopicName; string;
}
// IDictionary with a key of type string
// and a value of type IData
interface IDataSet
{
[key: string] : IData;
}
var source =
'{ "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"}'+
'}';
var a = <IDataSet>JSON.parse(source);
for(var key in a)
{
var elm = document.createElement('div');
elm.innerText = "key: " + key + ", topicId: " + a[key].topicId
document.body.appendChild(elm);
}
检查这个代码在这里 http://www.typescriptlang.org/Playground#src=interface%20IData%20%7B%0A%20%20%20%20topicId%3A%20number%3B%0A%20%20%20%20subTopicId%3A%20number%3B%0A%20%20%20%20topicName%3A%20string%3B%0A%20%20%20%20subTopicName%3B%20string%3B%0A%7D%0Ainterface%20IDataSet%0A%7B%0A%09%5Bkey%3A%20string%5D%20%3A%20IData%3B%0A%7D%20%0A%0Avar%20source%20%3D%20%0A'%7B%20%20%221%22%3A%7B%22topicId%22%3A1%2C%22subTopicId%22%3A1%2C%22topicName%22%3A%22x%22%2C%20%22subTopicName%22%3A%22x%22%7D%2C'%2B%0A'%20%20%20%222%22%3A%7B%22topicId%22%3A1%2C%22subTopicId%22%3A2%2C%22topicName%22%3A%22x%22%2C%22subTopicName%22%3A%22x%22%7D%2C'%2B%0A'%20%20%2262%22%3A%7B%22topicId%22%3A10%2C%20%22subTopicId%22%3A62%2C%22topicName%22%3A%22x%22%2C%22subTopicName%22%3A%22x%22%7D'%2B%0A'%7D'%3B%0A%0Avar%20a%20%3D%20%3CIDataSet%3EJSON.parse(source)%3B%0A%0Afor(var%20key%20in%20a)%0A%7B%0A%09var%20elm%20%3D%20document.createElement('div')%3B%0A%09elm.innerText%20%3D%20%22key%3A%20%22%20%2B%20key%20%2B%20%22%2C%20topicId%3A%20%22%20%2B%20a%5Bkey%5D.topicId%09%0A%20%20%20%20document.body.appendChild(elm)%3B%0A%7D (点击运行,查看结果)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)