ES `Map` 类型的 `keyof` 等价于什么?

Max*_*ber 5 typescript

给定一个 TypeScript Map,很容易找出键的类型 - 只需使用keyof

// keyof
type MyRec = Record<string, number>;
type MyRecKey = keyof MyRec; // works
Run Code Online (Sandbox Code Playgroud)

keyoffor相当于什么Map?TS 标准库中有内置的东西吗?

// MapKeyOf ?
type MyMap = Map<string, number>;
type MyMapKey = MapKeyOf<MyMap>; // is there a built-in way to do this?
Run Code Online (Sandbox Code Playgroud)

由于 TypeScript 出色的表现力,这可以在用户空间中表达,但我不想复制/粘贴它或可能是一个type-utils文件:

更新:这个问题以前有一个更复杂的用户空间定义

type KeyOfMap<M extends Map<unknown, unknown>> = M extends Map<infer K, unknown> ? K : never
Run Code Online (Sandbox Code Playgroud)

该解决方案来自@TitianCernicova-Dragomir 和@kaya3

Tit*_*mir 4

没有内置类型可以实现这一点。TS 团队对于添加新的实用程序类型非常保守(Omit是最后添加的,并非没有争议)。指导是使用类型实用程序库或使用您自己的,

我建议写作MapOf只是一个简单的条件类型,不确定为什么你需要更复杂的解决方案:

type KeyOfMap<M extends Map<unknown, unknown>> = M extends Map<infer K, unknown> ? K : never
Run Code Online (Sandbox Code Playgroud)

游乐场链接