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

Typescript中如何将Record的所有值转换为新的Record对象

TypeScript 动态转换Record类型实现方案

无需提前感知传入Record的键名,只需遍历所有键值对做值转换后生成新对象即可,以下是两种可行实现:

方案1:基于Object.fromEntries(现代TS/JS环境推荐)

function numberToString<Keys extends string>(record: Record<Keys, number>): Record<Keys, string> {
    return Object.fromEntries(
        Object.entries(record).map(([key, value]) => [key, value.toString()])
    ) as Record<Keys, string>;
}

实现逻辑说明:

  • Object.entries(record) 会将输入的Record对象转换为[键, 值]格式的二维数组,自动枚举所有自有键
  • 遍历二维数组,将数值类型的value调用toString()方法转为字符串格式
  • Object.fromEntries() 将处理完成的二维数组重新拼装为对象
  • 末尾的类型断言用于对齐Object.entries默认返回的string类型键和泛型Keys的类型,保证类型安全

方案2:基于for in遍历(兼容性更好)

适配不支持Object.fromEntries的低版本运行环境:

function numberToString<Keys extends string>(record: Record<Keys, number>): Record<Keys, string> {
    const result = {} as Record<Keys, string>;
    for (const key in record) {
        if (Object.prototype.hasOwnProperty.call(record, key)) {
            result[key] = record[key].toString();
        }
    }
    return result;
}

实现逻辑说明:

  • 提前初始化符合返回类型的空对象
  • 遍历输入Record的所有键,通过hasOwnProperty过滤原型链上的异常属性
  • 逐个将转换后的键值对写入空对象后返回

调用验证

使用示例代码调用可得到预期结果:

const record: Record<"A" | "B", number> = {
    "A": 10, "B": 20
};

const record2 = numberToString(record);
// record2 类型为 Record<"A" | "B", string>,实际值为 { A: "10", B: "20" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:09:05