#2757Medium

PartialByKeys

Implement a generic `PartialByKeys<T, K>` which takes two type argument `T` and `K`. Master advanced TypeScript type manipulation in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll implement a generic PartialByKeys<T, K> that makes only the specified keys K optional while leaving the rest of the properties required.

Challenge Instructions: PartialByKeys

Medium

Implement a generic PartialByKeys<T, K> which takes two type argument T and K.

K specify the set of properties of T that should set to be optional. When K is not provided, it should make all properties optional just like the normal Partial<T>.

For example

interface User {
name: string
age: number
address: string
}
 
type UserPartialName = PartialByKeys<User, 'name'> // { name?:string; age:number; address:string }

Change the following code to make the test cases pass (no type check errors).

Loading...

Detailed Explanation

type Merge<T> = {
  [K in keyof T]: T[K]
}
 
type PartialByKeys<T, K extends keyof T = keyof T> = Merge<
  Omit<T, K> & Partial<Pick<T, K>>
>

How it works:

As an alternative, you can write this without relying on built-in utility types:

type PartialByKeys<T, K extends keyof T = keyof T> = Merge<
  { [P in K]?: T[P] } & { [P in Exclude<keyof T, K>]: T[P] }
>

This challenge helps you understand intersection type flattening and selective property modification, and how to apply these concepts in real-world scenarios.

This challenge is originally from here.

Share this challenge

Learn the Concepts

Join early, learn faster.

Be the first to access the course, unlock exclusive launch bonuses, and get special early-bird pricing before anyone else.

No spam, unsubscribe at any time. We respect your privacy.

Limited Availability

Only 27 Spots left

Early Access

Get 1 month early access

>75% Off

Pre-Launch discount