Skip to content

Latest commit

 

History

History
54 lines (46 loc) · 1.18 KB

extract-object-type-values-into-a-union-type.md

File metadata and controls

54 lines (46 loc) · 1.18 KB

Extract Object Type Values Into A Union Type

Let's say we have an object type like the following:

type GlobalReducerEvent = {
    ADD_TODO: {
        text: string
    }
    LOG_IN: {
        email: string
    }
    DELETE_TODO: {
        todo_id: number
    }
}

We can use the indexed access type to access the value indexed at one the type keys. This works a lot like JavaScript's object access.

type AddTodoType = GlobalReducerEvent['ADD_TODO'];
/*
type AddTodoType = {
  text: string
}
*/

Where it gets more interesting and differs from JavaScript's object access is when we do an indexed access of a union type.

type TypesForEvents = GlobalReducerEvent[keyof GlobalReducerEvent];
/*
type TypesForEvents = {
  text: string
} | {
  email: string
} | {
  todo_id: number
}
*/

The result is a union of each of the values whose keys had matches in the union.

Where this gets more interesting and useful is when we use it as part of a mapped type like I explore in Breaking Down a Complex Mapped Type.