1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00
Files
til/typescript/extract-object-type-values-into-a-union-type.md

1.2 KiB

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.