export type DottedKeys = (T extends Record ? { [K in keyof T & string]: T[K] extends Record ? K | `${K}.${DottedKeys}` : K; }[keyof T & string] : string) & string; export type DottedKeysWithArray = (T extends Record ? { [K in keyof T & string]: T[K] extends (infer U)[] ? U extends Record ? K | `${K}.${DottedKeysWithArray}` : K : T[K] extends Record ? K | `${K}.${DottedKeysWithArray}` : K; }[keyof T & string] : string) & string; export type ExpandWildcard = P extends `*.${infer Key}` ? { [K in keyof T]: T[K] extends Record ? `${K & string}.${Key}` : never; }[keyof T] : P; export type ExpandWildcardWithArray = P extends `*.${infer Key}` ? { [K in keyof T]: T[K] extends (infer U)[] ? U extends Record ? `${K & string}.${Key}` : never : T[K] extends Record ? `${K & string}.${Key}` : never; }[keyof T] : P;