TypeScript如何创建递归嵌套映射类型 实现属性转boolean数组类型
解决方案
你只需要在泛型中加入递归判断逻辑:如果当前属性的类型是对象,就再次套用该泛型处理嵌套结构,否则直接返回boolean[]即可,最终泛型写法如下:
type BooleanResult<T> = { [Prop in keyof T]: T[Prop] extends object ? BooleanResult<T[Prop]> : boolean[] }
使用验证
直接套用你的Customer类型即可得到目标结果:
type Result = BooleanResult<Customer>
生成的Result类型和你要求的结构完全一致:
// 等价于 type Result = { companyName: boolean[] contactPerson: { firstName: boolean[] lastName: boolean[] } }
边界场景适配
如果你需要兼容数组、函数等特殊非普通对象的场景,可以调整条件判断规则,比如需要把数组类型直接映射为boolean[]而非递归处理的话,可以修改为:
type BooleanResult<T> = { [Prop in keyof T]: T[Prop] extends Array<any> ? boolean[] : T[Prop] extends object ? BooleanResult<T[Prop]> : boolean[] }
内容的提问来源于stack exchange,提问作者Alexander Zeitler
相关产品推荐
相关产品推荐

