TS magic
type NestedKeyOf<ObjectType extends object> = {
[Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object
? `${Key}` | `${Key}.${NestedKeyOf<ObjectType[Key]>}`
: `${Key}`;
}[keyof ObjectType & (string | number)];
const obj = {
a: 1,
b: {
c: 2,
d: [1, 2, 3],
},
};
const test = <T extends object>(obj: T, path: NestedKeyOf<T>) => {
console.log(obj, path);
};
test(obj, 'b.d.length');