使用我的代码
for (const [teamName, teamData] of Object.entries<TeamsData>(data)) {
...
}
我遇到错误
Argument of type 'TeamsData' is not assignable to parameter of type '{ [s: string]: TeamsData; } | ArrayLike<TeamsData>'.
Property 'length' is missing in type 'TeamsData' but required in type 'ArrayLike<TeamsData>'.
我的TeamsData
类型是
export interface TeamsData {
[key: string]: TeamDataStructure;
}
看看Object.entries的界面,
entries<T>(o: { [s: string]: T } | ArrayLike<T>): [string, T][];
所以我觉得它应该与{ [s: string]: TeamsData; }
相匹配,但事实并非如此。相反,它看起来像与ArrayLike<T>
匹配,导致它需要length
。我可以使用any
作为类型,并且错误消失了,但是我想知道如何在TypeScript中正确使用Object.entries
。
答案 0 :(得分:0)
我不确定为什么它不起作用,但是问题似乎出在您的泛型类型被显式传递。
只要将data
的类型严格设置为TeamsData
,就可以让编译器为您推断T
。
interface TeamsData {
[key: string]: number;
}
const data: TeamsData = { a:1, b:2 }
for (const [teamName, teamData] of Object.entries(data)) {
//...
}