type EnumDefinition = Record; type EnumBlock = Record; function Block(options:Fields):{[F in keyof Fields]:{[E in keyof Fields[F]]:Fields}} { const list = []; let fieldLookup = {}; const proxyOuter = new Proxy({}, {get(_target, propName){ fieldLookup = options[propName]; list.push(fieldLookup._); return proxyInner }}); const proxyInner = new Proxy({}, {get(_target, valName){ list.push(`:${fieldLookup[valName]};`); console.log(list); return proxyOuter; }}); return proxyOuter; } const styles = Block({ Pos:{_:"position", Abs:"absolute", Rel:"relative"}, Display:{_:"display", Flex:"flex", Grid:"grid", None:"none", Block:"block", InlineBlock:"inline-block"} }); export default styles function Sheet>(userClasses:UserClasses):{[Class in keyof UserClasses]:string} { return new Proxy({}, {get(_target, className){}}); }