💨

TypeScript オブジェクトのキーと値の型を生成する方法

2023/01/21に公開

やりたいこと

TypeScript でオブジェクトのキーと値の型をそれぞれ生成したい

オブジェクトのキーの型を生成する方法

結論、keyof と typeof の組み合わせで実現可能

const FONT_WEIGHT = {
  BOLD: 600,
  NORMAL: 300,
} as const

type FontWeightKeyType = keyof typeof FONT_WEIGHT
// 型推論結果 : type FontWeightKeyType = "BOLD" | "NORMAL"
TypeScript Playground で実際に試した結果
オブジェクトのキーの型を生成する方法

オブジェクトの値の型を生成する方法

結論、keyof と typeof の組み合わせで実現可能

const FONT_WEIGHT = {
  BOLD: 600,
  NORMAL: 300,
} as const

type FontWeightValueType = typeof FONT_WEIGHT[keyof typeof FONT_WEIGHT]
// 型推論結果 : type FontWeightValueType = 600 | 300
TypeScript Playground で実際に試した結果
オブジェクトの値の型を生成する方法

おまけに

ちなみにオブジェクトの値を取り出す便利な型を生成する
Custom Utility Type は以下のように型を定義すればOK。

ValueOf.ts

/** `Object`から`value`を取り出した`Union Types` */
export type ValueOf<T extends object> = T[keyof T]

使用方法

import { ValueOf } from "./ValueOf"

export const FONT_WEIGHT = {
  BOLD: 600,
  NORMAL: 300,
} as const

type FontWeightValueType = ValueOf<typeof FONT_WEIGHT>
// 型推論結果 : type FontWeightValueType = 600 | 300

Discussion