我试图用数组在另一张地图中映射一个数组。这些是接口:
interface Props {
columns: Array<{field: string, headerName: string, width: number}>;
rows: Array<{id: string, order: number, name: string, timeRequired: number}>;
handleSortOrder: (id: string, order: number, type: string) => void;
path: string;
updateSortOrder: MouseEventHandler<HTMLButtonElement>;
loading: boolean;
}所使用的类型是列和行。这是映射的一部分:
{
rows.map((r) => (
<tr className='micro-course-resource-table-row'>
{columns.map((c) => (
<td className='micro-course-td'>
<div
role='button'
tabIndex={-1}
onKeyDown={() => navigate(`/${path}/${r.id}`)}
onClick={() => navigate(`/${path}/${r.id}`)}
>
{r[c.field]}
</div>
</td>
))}
</tr>
));
}我所得到的错误在div:{rc.field}中,其中声明“元素隐式具有'any‘类型,因为类型'string’的表达式不能用于索引类型{ id: string;order: number;name: string;timeRequired: number;}‘”。
有人知道答案吗?我尝试过实现"...as keyof MyClass“,但是错误并没有消失。我遗漏了什么吗?
发布于 2022-07-07 12:48:40
我认为这是因为您使用的是noImplicitAny: true,而目前TypeScript并不知道column.field实际上是行中的一个有效属性。尝试像下面这样的r:any,或者通过在tsconfig.json文件中设置"noImplicitAny": false来禁用规则
rows.map((r:any) => ((也许这个答案就是你想要的?https://stackoverflow.com/a/43070857/1471485
编辑:做@jcalz在你问题的评论中提到的事情可能是可行的。
https://stackoverflow.com/questions/72897884
复制相似问题