如何实现TypeScript深层嵌套类型转全可选且值统一为string的工具类型
TypeScript 工具类型 ErrorUtility 实现方案
你可以通过递归的映射类型实现需求,完整代码如下:
type ErrorUtility<T> = { [K in keyof T]?: T[K] extends object ? ErrorUtility<T[K]> : string }
实现逻辑说明
- 用
[K in keyof T]遍历传入类型的所有属性 - 为每个属性添加
?修饰符,所有层级属性默认设为可选 - 对属性值做类型判断:如果是对象类型就递归套用
ErrorUtility保留嵌套结构,非对象类型统一替换为string
使用示例
type FormValues = { name: string organization: { name: string telephone: string employees: number } } // 生成的类型完全符合预期结构 const errors: ErrorUtility<FormValues> = {} // 正常取值不会报错,可选属性访问建议加可选链操作符 console.log({ employeesError: errors?.organization?.employees })
内容的提问来源于stack exchange,提问作者Richard Lindhout
相关产品推荐
相关产品推荐

