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

如何在TypeScript中递归将原始类型替换为自定义参数化类型

这个转换完全可以实现,用TypeScript的递归条件类型就能轻松搞定。

实现逻辑梳理

你给出的转换规则可以拆解为3个通用逻辑:

  • 基础类型字段(如string、number):替换为包含onChange方法的对象,onChange的入参类型和原字段类型一致
  • 对象类型字段:递归遍历对象内部的所有属性,每个属性都按上述规则转换
  • 数组类型字段:保留数组结构,仅对数组的元素类型做规则转换

具体实现代码

可以直接封装一个通用的递归工具类型:

type Transform<T> = 
  // 匹配数组类型,处理元素类型后保留数组结构
  T extends Array<infer Item> 
    ? Array<Transform<Item>>
    // 匹配对象类型,递归处理每一个属性
    : T extends object
      ? { [K in keyof T]: Transform<T[K]> }
      // 匹配基础类型,转换为带onChange的结构
      : { onChange: (v: T) => void }

用法

直接用该工具类型包裹你原有接口即可:

type transformed = Transform<example>

生成的类型和你需要的目标结构完全匹配。

注:你示例中u字段原类型是string,转换后onChange入参写为number,看起来是笔误。如果确实存在基础类型的映射需求,只需要在基础类型分支添加对应的条件判断即可。

内容的提问来源于stack exchange,提问作者exrhizo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:15:01