TypeScript: Map/Set オブジェクトの Key/Value の型を取得する

TypeScript: Map/Set オブジェクトの Key/Value の型を取得する

February 28, 2023

Map/Set オブジェクトの Key/Value の型は次のようにして取得できます。

type KeyOfMap<T extends Map<unknown, unknown>> = T extends Map<infer K, unknown> ? K : never;

type ValueOfMap<T extends Map<unknown, unknown>> = T extends Map<unknown, infer K> ? K : never;

type ValueOfSet<T extends Set<unknown>> = T extends Set<infer K> ? K : never;

使用例がこちら。

const alice = { name: 'alice', age: 20 };
const bob = { name: 'bob', age: 30 };
const charlie = { name: 'charlie', age: 40 };

const map = new Map([
  ['111', alice],
  ['222', bob],
  ['333', charlie],
]);

const set = new Set([alice, bob, charlie]);

type MapKey = KeyOfMap<typeof map>; // string

type MapValue = ValueOfMap<typeof map>; // { name: string; age: number; }

type SetValue = ValueOfSet<typeof set>; // { name: string; age: number; }