如何使用Typescript定义lodash reduce函数的返回类型?

时间:2014-07-28 15:03:29

标签: angularjs typescript

我正在尝试定义此Typescript函数的输出。

function (data: { topicId: number; subTopicId: number; topicName: string; subTopicName; string; }[] ) {
            var output = <IAnything>{
                dataMap: _.reduce(data, function (rv, v) {
                    rv[v.subTopicId] = v;
                    return rv;
                }, {});

我可以映射一些我没有在这个问题中包含的部分,但我对如何制作dataMap字段感到困惑。有人可以帮助我,告诉我如何在下面的界面中映射lodash _.reduce的输出。从我可以看到这个减少的输出是:

data: { topicId: number; subTopicId: number; topicName: string; subTopicName; string; }[]

但是如何表示这个以及如何表示用于数组索引的subTopicId?

interface IAnything {
    //data: { id: number; name: string; }[];
    dataMap: 
}

这是dataMap输出的样子:

{
 "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"}
}

1 个答案:

答案 0 :(得分:1)

您的界面应如下所示:

interface IAnything
{
    dataMap: IMap
}

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

interface IMap{
    [key: string] : IData;
}

然后你的功能看起来像这样:

function (data: IData[]){
    var output = <IAnything>{
        dataMap: _.reduce(data, function (rv: IData, v: IData)
        {
            rv[v.subTopicId] = v;
            return rv;
        }, {})
    };
}