TypeScript中Generic<K extends string>及key in遍历用法咨询
TypeScript泛型相关问题解析
1. 泛型<K extends string>的含义
<K extends string>是TypeScript的泛型约束,它规定泛型参数K只能是string类型,或是string的子类型(比如具体的字符串字面量"a"、"b",或是多个字符串字面量组成的联合类型"a"|"b")。这种约束用来限制泛型的取值范围,避免传入不符合要求的类型,保障代码的类型安全性。
2. 泛型K被限制为string类型时,如何通过key in K遍历
这里用到了TypeScript的映射类型语法[key in K],它可以遍历泛型K中的每个成员,将其作为对象的键,同时为每个键指定对应的值类型。结合代码示例拆解如下:
代码示例
type NewMappedTypes<K extends string> = { [key in K]: boolean } function composeTypedMap<K extends string>(k: NewMappedTypes<K>) { return k; } const t = composeTypedMap({ 'a': true ,'b':false}); console.log(t)
具体解释
NewMappedTypes是一个映射类型:当K为字符串联合类型(比如传入对象后,TypeScript会自动推断K为"a"|"b"),[key in K]会遍历K中的每个字符串字面量,生成对应的对象键,且每个键的值类型固定为boolean。- 函数
composeTypedMap接收符合NewMappedTypes<K>类型的参数并返回同类型对象。传入{'a': true, 'b': false}时,TypeScript会自动推导K为"a"|"b",因此变量t的类型就是{ a: boolean; b: boolean },完全匹配传入的结构。
内容的提问来源于stack exchange,提问作者Mantu Nigam
相关产品推荐
相关产品推荐

