#29785Medium

Deep Omit

Implement a type`DeepOmit`, Like Utility types [Omit](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys), A type takes two arguments. Master advanced TypeScript type manipulation in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll implement DeepOmit<T, S> which works like the built-in Omit utility type but supports dot-separated paths to omit deeply nested properties from an object type.

Challenge Instructions: Deep Omit

Medium

Implement a typeDeepOmit, Like Utility types Omit, A type takes two arguments.

For example:

type obj = {
person: {
name: string;
age: {
value: number
}
}
}
 
type test1 = DeepOmit<obj, 'person'>    // {}
type test2 = DeepOmit<obj, 'person.name'> // { person: { age: { value: number } } }
type test3 = DeepOmit<obj, 'name'> // { person: { name: string; age: { value: number } } }
type test4 = DeepOmit<obj, 'person.age.value'> // { person: { name: string; age: {} } }

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

Loading...

Detailed Explanation

type DeepOmit<T, S extends string> = {
  [K in keyof T as K extends (S extends `${infer First}.${string}` ? First : S) ? never : K]:
    S extends `${infer First}.${infer Rest}`
      ? K extends First
        ? DeepOmit<T[K], Rest>
        : T[K]
      : T[K]
}

How it works:

This challenge helps you understand recursive mapped types with key filtering and dot-path string parsing, 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