配列・オブジェクトからリテラル型を生成する


時々、typeof keyof など使用して別の型を生成したい時があります。
今回紹介するのは、配列・オブジェクトからリテラル型を生成したい時の方法になります。

配列からリテラル型

配列の中身をそのままリテラル型にしたい時の方法です。

const variants = ['primary', 'secondary', 'danger', 'warning', 'safe'] as const

type Variant = typeof variants[number] // "primary" | "secondary" | "danger" | "warning" | "safe"

オブジェクトからリテラル型

オブジェクトの値からリテラル型にしたい時の方法です。

const buttons = {
    variant: 'primary',
    text: 'hello',
    size: 'sm'
} as const

type ButtonProps = typeof buttons[keyof typeof buttons] // "primary" | "hello" | "sm"

一方、keyをリテラル型にしたい時は以下の方法です。

type ButtonProps = keyof typeof buttons // "variant" | "text" | "size"

以上になります。