如何将已有TypeScript类型转换为全属性可选且可空的类型?
实现TypeScript类型转换:将MyForm转为可选且可空的类型
当然可以实现,直接用TypeScript的映射类型就能搞定,不用重新定义整个类型结构。
先看原类型:
type MyForm = { email: string; password: string; }
我们可以定义一个通用的类型转换工具,遍历原类型的每个属性,把它改成可选同时允许为null:
type MakeOptionalAndNullable<T> = { [K in keyof T]?: T[K] | null; };
然后直接用这个工具转换MyForm,就能得到你要的类型:
type MyFormOptional = MakeOptionalAndNullable<MyForm>;
展开后这个类型完全等价于你想要的:
type MyFormOptional = { email?: string | null; password?: string | null; }
原理很简单:[K in keyof T]会遍历原类型的所有属性名,?标记属性为可选,T[K] | null把原属性的类型扩展成“原类型或null”,一步到位完成转换。
内容的提问来源于stack exchange,提问作者karmstr7
相关产品推荐
相关产品推荐

