Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
type user = { user: { find: string; update: number; }; account: { find: boolean; update: number; }; }; type userTarget = { user_find: string; user_update: number; account_find: boolean; account_update: number; };
type Target<T extends Record<string, Record<string, unknown>>> = UnionToIntersection<{ [K1 in keyof T & string]: { [K2 in keyof T[K1] & string]: { [KF in `${K1}_${K2}`]: T[K1][K2] }; }[keyof T[K1] & string]; }[keyof T & string]>; type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; type UserTarget1 = Target<user> interface UserTarget2 extends Target<user> {}