如何在 Typescript 中获取映射中值的类型?

boy*_*boy 3 typescript

我在任何地方都找不到解决方案。

可以说我有

type ObjectRecord = { [key: number]: SomeType }
Run Code Online (Sandbox Code Playgroud)

现在我可以有另一种类型

type ValueInObjectRecord = ObjectRecord[number] // SomeType
Run Code Online (Sandbox Code Playgroud)

如果我想对地图做同样的事情怎么办?

type MapRecord = Map<number, SomeType>
Run Code Online (Sandbox Code Playgroud)
type ValueInMapRecord = MapRecord[number] // does not work!
Run Code Online (Sandbox Code Playgroud)

A_b*_*lop 12

您将希望在条件类型/中使用类型推断infer

type SomeType = { foo: string }

type MapRecord = Map<number, SomeType>

type ValueInMapRecord = MapRecord extends Map<any, infer I> ? I : never
// type ValueInMapRecord = { foo: string; }
Run Code Online (Sandbox Code Playgroud)

这是检索类型成分的常见方法,也适用于ObjectRecord

type ValueInObjectRecord = ObjectRecord extends {[key:number]: infer I} ? I : never
// type ValueInObjectRecord = { foo: string; }
Run Code Online (Sandbox Code Playgroud)

游乐场代码