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

TypeScript如何实现Transform<T>将对象键值映射为指定包装类型

实现方案

第一步:定义类型映射字典与类型转换工具

// 统一维护类型映射规则,后续新增类型只需要扩展该对象即可
type TypeMap = {
  string: { "stringValue": string },
  number: { "numberValue": number }
}

// 把原始类型映射为TypeMap的对应键
type TypeToKey<T> = 
  T extends string ? "string" :
  T extends number ? "number" :
  never

第二步:实现Transform泛型

type Transform<T extends object> = {
  [Property in keyof T]: TypeMap[TypeToKey<T[Property]>]
}

效果验证

type First = {
  a: string,
  b: number
}

// 转换后得到的Second类型完全符合需求
type Second = Transform<First>
/*
Second的实际类型为:
{
  a: { "stringValue": string },
  b: { "numberValue": number }
}
*/

说明

之前使用typeof T做索引访问失败的原因是,typeof是值层面的运算符,不能直接作用于TypeScript的类型参数,类型层面的类型匹配需要通过条件类型实现。
该方案把所有映射规则收敛到了TypeMap中,后续需要新增boolean、数组等类型的映射时,只需要扩展TypeMap和TypeToKey的判断分支即可,不需要修改Transform的核心逻辑,可维护性远高于链式条件类型的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:45:02