Javascript字典和添加值

Javascript字典和添加值,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我对我的字典有这样的定义 const dData: { [mydate: string]: {[stuff in Bag]?: IbagData}; }={} export enum Bag{ toys= "TOYS", books= "BOOKS", } export interface IbagData{ data: ImyDataArray[]; } 它是空的,我需要能够添加条目到它 我有const[dateSelec

我对我的字典有这样的定义

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”)

当我尝试像这样给mydate赋值时,它不喜欢它

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>> = {}
edit2:

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

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' } }
edit2:

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

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' } }

你需要包括“Bag”和“IbagData”的定义,因为Bag既是一个类型,也是一个具体的对象,这显然是不可能的。当然,我刚刚添加了它们,“它也不喜欢这样”-错误消息是什么?所有这些(Bag和IbagData)都已经在我的项目中了,我只是在帖子中添加了它们。错误信息如上图所示。哦,此行dData[mydate][Bag.toys]无法读取未定义的属性“toys”。您需要包括“Bag”和“IbagData”的定义,因为就目前而言,Bag既是一个类型,也是一个具体的对象,这显然是不可能的。当然,我刚才添加了它们,“它也不喜欢”-错误信息是什么?所有这些都是错误(Bag和IbagData)已经在我的项目中了,我刚刚在帖子中添加了它。错误消息如上图所示。哦,这行dData[mydate][Bag.toys]无法读取undefinedhumm的属性“toys”..有趣的是,mydate也需要一个值..它必须是这样的..8/26/2020:{toys:myToysData,books:myBooksData}我需要能够为存储在dateselection和字符串中的mydate赋值。@Sarah然后简单地
dData[dateselection]={[Bags.toys]:“一些IBagData对象”}
@Sarah我想我误解了你的整个问题,但我给出了一个工作示例,希望对你有所帮助。看起来dData[dateselection]={[Bags.toys]:“某些IBagData对象”}和dData[dateSelection][Bag.toys]=“Bag数据”正在工作..似乎..你介意解释一下这是如何构建的吗.我很困惑为什么[]使用和不使用。标记以及它是如何将日期选择分配给mydate的。@Sarah我编辑了答案,将“THIS_NAME_don_not_MATTER_AT_ALL”包括在内,希望能帮助您更多地理解mydate实际上并不存在,它只是索引签名上的一个标签,我希望typescript将其删除。我们使用括号而不是点标记打开,因为我们正在使用变量而不是原始标识符访问索引。例如,您可以这样做:
dData[dateSelection].TOYS=“bag data”
,它将是相同的。哼哼..很有趣,但mydate也需要一个值..它需要类似的东西..8/26/2020:{玩具:myToysData,书籍:myBooksData}我需要能够为存储在dateselection和字符串中的mydate赋值。@Sarah然后简单地
dData[dateselection]={[Bags.toys]:“一些IBagData对象”}
@Sarah我想我误解了你的整个问题,但我给出了一个工作示例,希望对你有所帮助。看起来dData[dateselection]={[Bags.toys]:“某些IBagData对象”}和dData[dateSelection][Bag.toys]=“Bag数据”正在工作..似乎..你介意解释一下这是如何构建的吗.我很困惑为什么[]使用和不使用。标记以及它是如何将日期选择分配给mydate的。@Sarah我编辑了答案,将“THIS_NAME_don_not_MATTER_AT_ALL”包括在内,希望能帮助您更多地理解mydate实际上并不存在,它只是索引签名上的一个标签,我希望typescript将其删除。我们使用括号而不是点标记启用,因为我们使用的是变量而不是原始标识符访问索引。例如,您可以这样做:
dData[dateSelection].TOYS=“bag data”
,它将是相同的。