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; }