typescript 如何键入这个复杂对象的想法?

relj7zay  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(157)

我有这样一个字面上的对象:

const objectIdea = {
  form: {
    div: {
      attributes: {
        cssClasses: ["Container", "flex"],
      },
      h1: {
        attributes: {
          text: "Hello world 2!",
        },
      },
    },

    div: {
      h1: {
        text: "And so on."
      },
    },

    main: {
      h1: {
        attributes: {
          text: "Hello world!"
        }
      },
    },
  },
};

其思想是key代表一个HTMLTag,它的值是另一个接受属性key和另一个HTMLTag的对象。(我正在试验)是从该对象自动生成HTML组件,这意味着第一个Form是父对象,接着是3查尔兹div。第一个div有一个h1标签,依此类推。对象可以是任意长度和任意嵌套长度,但始终应为:

HTMLTag: { 
        attributes: HTMLTagAttributes,  // should infer this from it's parent         
        HTMLTag:  {      //is the child
                    attributes: HTMLTagAttributes,     // should infejr this from it's parent 
                    HTMLTag:  // I think you get the idea
}

我尝试了一些东西,但没有有用的这个问题。

interface IComponentObject<T extends keyof HTMLElementTagNameMap = keyof HTMLElementTagNameMap> {
  T:{
    attributes: T
    
  }
}
hgc7kmma

hgc7kmma1#

我想应该可以建立一个像你这样的结构。
有两点需要补充:

  • 唯一HTML标记
  • 递归结构

这是我的代码,也许能帮上忙.

type HTMLTag = "div" | "form" | "p" // add more when needed

type UniqueHTMLTag = `${HTMLTag}#${string}` // make html tags unique, because same keys are not allowed

type HTMLDOM = {
    [key in UniqueHTMLTag]: {
        attributes: {
            "name": string
        }
        children: HTMLDOM
        // add more thinks
    }
}

相关问题