如何键入来自.forEach函数的Object?

时间:2014-10-24 13:02:30

标签: typescript

我有这个数组或ITest对象:

var x: ITest[] = 

[{"adminTestId":131,"code":"abcde","userTestId":1},
 {"adminTestId":130,"code":"ddddd","userTestId":2}]

我创建了一个函数,我可以用它来获取一个对象,给定userTestId:

elem = (arr, property, num) => {
    arr.forEach(function (elem, index) {
        if (elem[property] === num)
            return elem;
    })
};

当我这样称呼时,我收到错误:

var test: ITest = <ITest> this.elem(this.tests, 'userTestId', userTestId);

Error   5   Cannot convert 'void' to 'ITest'.   

有人可以解释我做错了什么。在这种情况下,我想键入this.elem的输出为ITest类型。

1 个答案:

答案 0 :(得分:3)

这里有一些问题:你不能短路forEach而且forEach中的elem var在循环之外是不可评估的。

以下是一个解决方案:

        elem = (arr : any[], property, num) => {
        var found = null;
        arr.forEach(function (elem, index) {
            if (elem[property] === num) {
                found = elem;
            }
        })

        return found;
    };

您可以将其缩短为:

        var foundItems = arr.filter((item) => item[property] === num);
        return foundItems.length === 1 ? foundItems[0] : null;

或者你也可以使用像lodash这样的东西:

_.find(arr, (item) => item[property] === num);