DEV Community

Discussion on: Advanced TypeScript Exercises - Question 5

Collapse
 
alextsk profile image
alextsk • Edited

tried to simplify your solution

type OptionalFields<T extends Config> = Pick<T,{
  [K in keyof T]: T[K] extends false ? K : never    
}[keyof T]>

type Result<C extends Config> = Required<Omit<User, keyof OptionalFields<C>>>

declare function getUser<C extends Config>(
     config: C
): Result<C>;
Enter fullscreen mode Exit fullscreen mode

--edit
one more minor improvement

type OptionalFields<T extends Config> = {
  [K in keyof T]: T[K] extends false ? K : never    
}[keyof T]

type Result<C extends Config> = Required<Omit<User, OptionalFields<C>>>

Enter fullscreen mode Exit fullscreen mode