type GetLevel4Property = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? Key3 extends keyof Model[Key1][Key2] ? Key4 extends keyof Model[Key1][Key2][Key3] ? { [K in Key1]: { [K2 in Key2]: { [K3 in Key3]: { [K4 in Key4]: Model[Key1][Key2][Key3][Key4] } } } } : never : never : never : never ; type GetLevel3Property = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? Key3 extends keyof Model[Key1][Key2] ? { [K in Key1]: { [K2 in Key2]: { [K3 in Key3]: Model[Key1][Key2][Key3] } } } : never : never : never ; type GetLevel2Property = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? { [K in Key1]: { [K2 in Key2]: Model[Key1][Key2] } } : never : never ; type GetLevel1Property = Key1 extends keyof Model ? { [K in Key1]: Model[Key1] } : never ; export type GetNestedProperty = T extends '' ? {} : T extends `${infer Level4Part1}.${infer Level4Part2}.${infer Level4Part3}.${infer Level4Part4}` ? GetLevel4Property : T extends `${infer Level3Part1}.${infer Level3Part2}.${infer Level3Part3}` ? GetLevel3Property : T extends `${infer Level2Part1}.${infer Level2Part2}` ? GetLevel2Property : GetLevel1Property; type GetLevel4PropertyType = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? Key3 extends keyof Model[Key1][Key2] ? Key4 extends keyof Model[Key1][Key2][Key3] ? Model[Key1][Key2][Key3][Key4] : never : never : never : never ; type GetLevel3PropertyType = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? Key3 extends keyof Model[Key1][Key2] ? Model[Key1][Key2][Key3] : never : never : never ; type GetLevel2PropertyType = Key1 extends keyof Model ? Key2 extends keyof Model[Key1] ? Model[Key1][Key2] : never : never ; type GetLevel1PropertyType = Key1 extends keyof Model ? Model[Key1] : never ; export type GetNestedPropertyType = T extends '' ? {} : T extends `${infer Level4Part1}.${infer Level4Part2}.${infer Level4Part3}.${infer Level4Part4}` ? GetLevel4PropertyType : T extends `${infer Level3Part1}.${infer Level3Part2}.${infer Level3Part3}` ? GetLevel3PropertyType : T extends `${infer Level2Part1}.${infer Level2Part2}` ? GetLevel2PropertyType : GetLevel1PropertyType;