export type NestedKeyOf = ObjectType extends object ? { [Property in keyof ObjectType]: `${Property & string}` | `${Property & string}.${NestedKeyOf}`; }[keyof ObjectType] : never; export type NestedValueOf = Path extends `${infer Cur}.${infer Rest}` ? Cur extends keyof ObjectType ? NestedValueOf : never : Path extends keyof ObjectType ? ObjectType[Path] : never; export type NamespaceKeys = { [PropertyPath in AllKeys]: NestedValueOf extends string ? never : PropertyPath; }[AllKeys]; export type MessageKeys = { [PropertyPath in AllKeys]: NestedValueOf extends string ? PropertyPath : never; }[AllKeys];