如何在打字稿上使用linq js sum和average?

时间:2017-07-15 13:14:39

标签: javascript linq typescript

我正在尝试在打字稿上使用Linq js库。我有以下功能;

 calculateAvgRating(data) {
        this.user_ratings = Enumerable.from(data).groupBy(p => '${p.rating_type}', null,
            function (key, g) {
                var result = {
                    rating_type: key,
                    total: g.sum("$.rating"),
                    avg: g.average("$.rating")
                }
                return result;
            }).toArray();
    }

但是,我计算总数和平均值的行给了我以下打字稿错误;

  

类型'string'的参数不能分配给类型的参数   '(element:{})=>数”。

我知道,我需要更改我给予sum和average函数的参数,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

似乎linq.js库的定义文件不支持简写(op.sum("$.value | 0")),尽管库有。

您可以排除ts编译器提示库上的错误,这是不理想的,或者使用函数回调。

import { from } from 'linq';

interface IRating {
    type: number,
    value: number
};

let data: IRating[] = [{
    type: 5,
    value: 5.0
}, {
    type: 0,
    value: 1.0
}, {
    type: 3,
    value: 2.3
}, {
    type: 0,
    value: 0.6
}];


let result = from(data).groupBy(rating => rating.type, null, (key, op) => {
    return {
        type: key,
        total: op.sum(item => item["value"] || 0),
        avg: op.average(item => item["value"] || 0)
    };
}).toArray();

console.log(result)