Javascript字典和添加值



我有一个像这样的字典定义

const dData: {
[mydate: string]:  {[stuff in Bag]?: IbagData};
}={}
export enum Bag{
toys= "TOYS",
books= "BOOKS",
}
export interface IbagData{
data: ImyDataArray[];
}

它是空的,我需要能够添加条目到它。

我有const [dateSelection, setDateSelection] = useState("8/26/2020");

当我试图像这样给我的日期赋值时,它不喜欢它。

dData[mydate] = dateSelection;   // This one says Type 'string' has no properties in common with type '{ toys?: IbagData| undefined; books?: IbagData| undefined; }'

它甚至不认识我的约会对象。

之后,我希望能够分配

dData[mydate][Bag.toys] = Data

但在此之前,我需要看看我的字典中是否已经有当天的条目,我试着做

dData[mydate][Bag.toys]

它也不喜欢那样。我想我想知道的是如何用这种结构填充字典dData。

const dData: Record<string, Record<Bag, IbagData>> = {}

编辑:

dData[mydate] = dateSelection这不起作用,因为"dateSelection"是一个字符串,并且您希望放入一个如下所示的对象:

dData[mydate] = {
[Bags.toys]: "some IBagData object"
}

编辑2:

这个问题很难理解,但我终于明白你在问什么了,你最初的类型定义很好。下面是一个工作示例:

type IbagData = "bag data"
export enum Bag {
toys = "TOYS",
books = "BOOKS",
}
const dData: { [THIS_NAME_DOES_NOT_MATTER_AT_ALL: string]: { [stuff in Bag]?: IbagData} } = {}
const dateSelection = "8/27/2020"
console.log(dData[dateSelection]) // This undefined so we cannot index it.
// Let's initialize it
dData[dateSelection] = {};
// OK, now we can index it.
dData[dateSelection][Bag.toys] = "bag data"
console.log(dData) // { '8/27/2020': { TOYS: 'bag data' } }

最新更新