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