如何在TypeScript中获取Map类型定义的键与值类型
在TypeScript中获取Map类型的键与值类型
当然可以,你可以利用TypeScript的条件类型推断(infer关键字)来提取Map类型的键类型和值类型。
方法一:定义通用工具类型
先封装可复用的工具类型,方便多次使用:
// 提取Map的键类型 type MapKeyType<T extends Map<any, any>> = T extends Map<infer K, any> ? K : never; // 提取Map的值类型 type MapValueType<T extends Map<any, any>> = T extends Map<any, infer V> ? V : never;
然后针对你的示例类型Foo使用这些工具类型:
type Foo = Map<string, number>; // 获取键类型,结果为string type FooKey = MapKeyType<Foo>; // 获取值类型,结果为number type FooValue = MapValueType<Foo>;
方法二:直接内联推断
如果不需要复用工具类型,也可以直接在类型定义中进行推断:
type Foo = Map<string, number>; type FooKey = Foo extends Map<infer K, any> ? K : never; // string type FooValue = Foo extends Map<any, infer V> ? V : never; // number
原理说明
infer关键字允许我们在条件类型中声明一个待推断的类型变量,当传入的类型匹配Map<K, V>的结构时,TypeScript会自动将对应的键类型赋值给K,值类型赋值给V,最终返回推断出的类型。
内容的提问来源于stack exchange,提问作者LoyalPotato
相关产品推荐
相关产品推荐

