上图中的Partial、Required、Record、Pick工具类型你用过吗?这些工具类型内部都使用了keyof操作符,那么这个操作符的作用是什么呢?如果你不清楚,看完这篇也许你就会明白这期的内容。在JavaScript中,我们可以使用Object.keys方法来获取对象中的键,它返回一个键数组。constuser={id:666,name:"Arbo",}constkeys=Object.keys(user);//["id","name"]在TypeScript中,我们处理的是类型。如果要获取对象类型中的key,需要使用keyof操作符。该运算符在TypeScript2.1中引入,用于获取返回类型为联合类型的类型中的所有键。输入User={id:number;名称:字符串;}类型UserKeys=keyofUser;//“身份”|"name"获取到对象类型的key后,我们就可以通过类似于属性访问的语法来访问对应key值的类型。typeU1=User["id"]//numbertypeU2=User["id"|“名称”]//字符串|numbertypeU3=User[keyofUser]//字符串|number那么在实际工作中,keyof运算符有什么用呢?这里我们举个例子。这是一个简单的getProperty函数,接收obj和key两个参数,获取obj对象上key参数对应的属性值。functiongetProperty(obj,key){returnobj[key];}constuser={id:666,name:"阿宝哥",}constuserName=getProperty(user,"name");那么在TS中如何定义上面的getProperty函数呢?这里我们直接将函数复制到TS工程中。对于以上代码,TS编译器会提示如下错误信息:Theparameter"obj"implicitlyhastype"any"。ts(7006)参数“key”隐式具有类型“any”。ts(7006)此消息告诉我们obj和key参数隐式具有类型“any”。为了解决这个问题,我们可以显式定义obj和key参数的类型。函数getProperty(obj:object,key:string){returnobj[key];//设置Error}后参数上的错误消息消失,但函数体中出现新的错误消息:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能与索引类型“{}”。在类型“{}”上找不到参数类型为“字符串”的索引签名。ts(7053)那么如何解决以上问题呢?这时候我们可以使用TS泛型和这个问题的keyof操作符:functiongetProperty
