如何在打字稿中表示键为日期且内容为数组的对象列表?
How to represent in typescript a list of objects where the key is the date and the content is an array?
我正在绞尽脑汁用打字稿表示以下数据集:
我正在尝试如下,但我在 ReactJs 中遇到错误。
interface IDose {
name: string;
date: string;
}
interface IVaccine {
[date: string]: IDose[]
}
const [data, setData] = useState<IVaccine[]>([]);
...
<IonGrid>
<IonRow>
{data.map((d, i) => {
return (
<IonCol key={i}>
<IonButton>
{d.date}
<br />
{d.name}
</IonButton>
</IonCol>
);
})}
</IonRow>
</IonGrid>
错误:未捕获类型错误:data.map 不是函数...
谁能给我一些建议?
首先,为您的数组对象创建一个新对象class。
export class Object {
name: string;
date: string; //or Date
}
然后,创建数据结构
let objectMap : Map<string (date string), Object[]> = new Map<string, Object[];
但是...当键已经是日期时,您还需要一个额外的日期字段吗?我觉得您可以简单地使用键作为命名字段的日期。
我确实发现您的代码存在一些问题。
首先,data
状态似乎不是对象数组,因此如果您想遍历键并打印它们各自的 Array.map() 将不起作用值。因此,如果您希望遍历数据并打印其中的值,您可能需要使用 Object.values() 代替。也就是说,您应该将 state
的类型定义为对象(字典),而不是对象数组。
这是您应该进行的更改:
interface IDose {
name: string;
date: string;
}
interface IVaccine {
[date: string]: IDose[]
}
// here
const [data, setData] = useState<IVaccine>();
...
<IonGrid>
<IonRow>
// and here
{data && Object.values(data).map((d, i) => {
return (
<IonCol key={i}>
<IonButton>
{d.date}
<br />
{d.name}
</IonButton>
</IonCol>
);
})}
</IonRow>
</IonGrid>
我正在绞尽脑汁用打字稿表示以下数据集:
我正在尝试如下,但我在 ReactJs 中遇到错误。
interface IDose {
name: string;
date: string;
}
interface IVaccine {
[date: string]: IDose[]
}
const [data, setData] = useState<IVaccine[]>([]);
...
<IonGrid>
<IonRow>
{data.map((d, i) => {
return (
<IonCol key={i}>
<IonButton>
{d.date}
<br />
{d.name}
</IonButton>
</IonCol>
);
})}
</IonRow>
</IonGrid>
错误:未捕获类型错误:data.map 不是函数...
谁能给我一些建议?
首先,为您的数组对象创建一个新对象class。
export class Object {
name: string;
date: string; //or Date
}
然后,创建数据结构
let objectMap : Map<string (date string), Object[]> = new Map<string, Object[];
但是...当键已经是日期时,您还需要一个额外的日期字段吗?我觉得您可以简单地使用键作为命名字段的日期。
我确实发现您的代码存在一些问题。
首先,data
状态似乎不是对象数组,因此如果您想遍历键并打印它们各自的 Array.map() 将不起作用值。因此,如果您希望遍历数据并打印其中的值,您可能需要使用 Object.values() 代替。也就是说,您应该将 state
的类型定义为对象(字典),而不是对象数组。
这是您应该进行的更改:
interface IDose {
name: string;
date: string;
}
interface IVaccine {
[date: string]: IDose[]
}
// here
const [data, setData] = useState<IVaccine>();
...
<IonGrid>
<IonRow>
// and here
{data && Object.values(data).map((d, i) => {
return (
<IonCol key={i}>
<IonButton>
{d.date}
<br />
{d.name}
</IonButton>
</IonCol>
);
})}
</IonRow>
</IonGrid>