TypeScript Utility: keyof nested object

In this blog post, we will learn how to build a TypeScript util type, that exposes all the key paths of an object, including the nested ones.


Typescript: NestedKeyOf

  • Utility of nested objects

    type NestedKeyOf<ObjectType extends object> =
      {[Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object
        ? `${Key}` | `${Key}.${NestedKeyOf<ObjectType[Key]>}`
        : `${Key}`
      }[keyof ObjectType & (string | number)];
    declare function sortBy<T extends object>(person: T, sort: NestedKeyOf<T>)
     
    const person = {
      name: 'bob',
      age: 30,
      dog: {
        owner: {
          name: 'mydog'
        }
      }
    }
    sortBy(person, 'dog.owner.name'); // <- typescript shows valid options