typeKeysOfTrueValues<TextendsConfig>=Pick<T,{[KinkeyofT]:T[K]extendstrue?K:never}[keyofT]>;typeUserReturnType<TextendsUser,CextendsConfig>=Required<Omit<T,Exclude<keyofT,keyofKeysOfTrueValues<C>>>>;// Here declaration to be changed 🔥declarefunctiongetUser<TextendsUser,CextendsConfig>(config:C):UserReturnType<T,C>;
typeKeysOfTrueValues<TextendsConfig>=Pick<T,{[KinkeyofT]:T[K]extendstrue?K:never}[keyofT]>;typeOnlyTrueKeys<TextendsUser,CextendsConfig>=Exclude<keyofT,keyofKeysOfTrueValues<C>>;typeFilteredUser<TextendsUser,CextendsConfig>=Omit<T,OnlyTrueKeys<T,C>>;typeFilteredUserRequiredFields<TextendsUser,CextendsConfig>=Required<FilteredUser<T,C>>;typeUserReturnType<TextendsUser,CextendsConfig>=FilteredUserRequiredFields<T,C>;// Here declaration to be changed 🔥declarefunctiongetUser<TextendsUser,CextendsConfig>(config:C):UserReturnType<T,C>;
Quick one -
Playground link
tried to simplify your solution
--edit
one more minor improvement
Slightly verbose one -
Playground Link