【发布时间】:2022-01-04 05:34:25
【问题描述】:
这是我的代码:
interface Siswa {
name: string,
points: { a: number, b: number, c: number, d?: number, e?: number }
}
function find_average_points(data: Array<Siswa>): Array<{name: string, average: number}> {
let returned_array: Array<{name: string, average: number}> = [];
data.forEach((item: Siswa) => {
let sum: number = 0;
let keys = Object.keys(item.points);
keys.forEach((key: any) => sum+=item.points[key]);
returned_array.push({name: item.name, average: (sum/keys.length)});
});
return returned_array;
}
当我在 JavaScript 中尝试这个函数时,它运行正确并且结果是我想要的,但是在 TypeScript 中,我在item.points[key] 中遇到了错误。它说:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ a: number; b: number; c: number; d?: number | undefined; e?: number | undefined; }'.
No index signature with a parameter of type 'string' was found on type '{ a: number; b: number; c: number; d?: number | undefined; e?: number | undefined; }'
我不知道这是什么意思。
【问题讨论】:
-
这是一个错误,因为objects may have more keys than are declared in their interfaces,所以除非您想在
sum中添加可能随机的东西,否则您应该使用硬编码的键数组并过滤它们like this。如果这满足您的需求,我很乐意写一个答案来解释这一点(明天因为现在是我的就寝时间);如果没有,请告诉我哪些用例不满意。
标签: arrays typescript foreach object-property