给定一个 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
没有内置类型可以实现这一点。TS 团队对于添加新的实用程序类型非常保守(Omit是最后添加的,并非没有争议)。指导是使用类型实用程序库或使用您自己的,
我建议写作MapOf只是一个简单的条件类型,不确定为什么你需要更复杂的解决方案:
type KeyOfMap<M extends Map<unknown, unknown>> = M extends Map<infer K, unknown> ? K : never
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3901 次 |
| 最近记录: |