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
-
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