You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:39:00