因此,我正在构建一个饮食跟踪应用程序,并在我的组件内计算用户剩余的大量营养素。我认为一种有效的方法是将三个变量存储到一个对象中,因此我可以对其进行迭代以计算剩余值。在实施打字稿之前,代码可以正常工作,但是现在我已经将文件转换为打字稿,它引发了以下错误,我似乎无法解决:
错误:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ f: number; c: number | null; d: number | null; k: number | null; p: number; e: number; w: number | null; }'.
No index signature with a parameter of type 'string' was found on type '{ f: number; c: number | null; d: number | null; k: number | null; p: number; e: number; w: number | null; }'.
存储值的对象:
const values: Mapper = {
consumed: {
f: entry.m.f,
c: entry.m.c,
d: entry.m.d,
k: entry.m.k,
p: entry.m.p,
e: entry.m.e,
w: entry.w.t,
},
goals: {
f: entry.g.s.f,
c: entry.g.s.c,
d: entry.g.s.d,
k: entry.g.s.k,
p: entry.g.s.p,
e: entry.g.s.e,
w: entry.g.s.w,
},
sum: {
f: 0,
c: 0,
d: 0,
k: 0,
p: 0,
e: 0,
w: 0,
},
};
使用的界面
interface Mapper {
consumed: {
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
goals: {
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
sum: {
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
}
我的.forEach:
goals.forEach((goal) => {
if (values.goals[goal] !== null) {
values.sum[goal] = +(
values.goals[goal] - values.consumed[goal]
).toFixed(1);
}
});
我不明白。 forEach甚至确保对values.sum [goal]的分配是一个数字。我已经控制台记录了类型并验证了号码分配。那为什么给我这么难呢?我也尝试过Object.keys(values).forEach
[ ... ],但是没有运气。
有人可以在这里帮助我吗?我对打字稿很陌生,所以我想我可能只是在这里犯了一个简单的错误...
感谢您抽出宝贵的时间来阅读和帮助!
答案 0 :(得分:0)
对于遇到类似问题的人,我有解决方法:
您必须使用[index: string]: any;
定义索引类型,并在其中进行迭代
interface Mapper {
[index: string]: any;
consumed: {
[index: string]: any;
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
goals: {
[index: string]: any;
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
sum: {
[index: string]: any;
f: number;
c: number | null;
d: number | null;
k: number | null;
p: number;
e: number;
w: number | null;
};
}