Partial、Required、Pick、Readonly工具类型你用过吗?你知道他们内部是如何运作的吗?如果你想彻底掌握它们并实现自己的工具类型,那么本文介绍的内容一定不能错过。在日常工作中,用户注册是一个很常见的场景。这里我们可以使用TS来定义一个User类型,其中所有的键都是必需的。输入User={名称:字符串;//名称密码:字符串;//密码地址:字符串;//地址电话:字符串;//联系电话};通常,对于注册用户,我们只允许用户修改部分用户信息。此时,我们可以定义一个新的UserPartial类型,它表示用于更新的用户对象的类型,该类型中的所有键都是可选的。输入UserPartial={名称?:字符串;//名称密码?:string;//密码地址?:string;//地址电话?:字符串;//联系电话};用户对象对应的对象类型中的所有键都是只读的。针对这个需求,我们可以定义ReadonlyUser类型。输入ReadonlyUser={只读名称:字符串;//名称只读密码:字符串;//密码只读地址:字符串;//地址只读phone:string;//联系电话};类型,你会发现它们包含很多重复的代码。那么如何减少上述类型中的重复代码呢?答案是使用映射类型,它是一种通用类型,可用于将原始对象类型映射到新的对象类型。映射类型的语法如下:{[PinK]:T}其中PinK类似于JavaScript中的for...in语句,用于遍历K类型中的所有类型,而T类型变量用于表示任何类型的。您还可以使用两个附加修饰符readonly和?在映射过程中。通过在它们前面加上+和-来添加和删除相应的修饰符。如果不加前缀,默认使用+。现在我们可以总结一下常见的映射类型语法:{[PinK]:T}{[PinK]?:T}{[PinK]-?:T}{readonly[PinK]:T}{readonly[PinK]?:T}{-readonly[PinK]?:T}介绍完映射类型的语法,我们来看一些具体的例子:typeItem={a:string;b:数量;c:boolean};typeT1={[Pin"x"|“y”]:数字};//{x:number,y:number}typeT2={[“x”中的P|“y”]:P};//{x:"x",y:"y"}typeT3={[Pin"a"|"b"]:项目[P]};//{a:string,b:number}typeT4={[PinkeyofItem]:Item[P]};//{a:string,b:number,c:boolean}让我们看看如何使用映射类型重新定义UserPartial类型:typeMyPartial
