export type CreateElement = { (...children: (Node | string)[]): T; (attrs: Partial, ...children: (Node | string)[]): T; }; type ElementCreator = { [K in keyof HTMLElementTagNameMap]: CreateElement; }; const h = new Proxy({} as ElementCreator, { get: (_, tag: string) => (...args: any[]) => { const el = document.createElement(tag); if (typeof args[0] === "object") { Object.assign(el, args.shift()); } el.append(...args.flat()); return el; }, }); export default h;