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

如何实现为对象属性名拼接前缀的泛型map函数

TypeScript 泛型实现:为对象所有属性名添加指定前缀

实现思路

  • 类型层面用 TypeScript 映射类型实现返回值的自动推导,保证新对象的键名、值类型和原对象强关联,不会丢失类型提示
  • 运行时遍历原对象的可枚举自有属性,拼接前缀生成新键名,属性值保持不变后返回新对象

完整实现代码

现代环境版本(支持Object.fromEntries)

function addPrefixToObjectKeys<T extends Record<string, any>, P extends string>(
  obj: T,
  prefix: P
): { [K in keyof T as `${P}${string & K}`]: T[K] } {
  return Object.fromEntries(
    Object.entries(obj).map(([key, value]) => [`${prefix}${key}`, value])
  ) as { [K in keyof T as `${P}${string & K}`]: T[K] };
}

低版本兼容版本(兼容ES5及以上)

function addPrefixToObjectKeys<T extends Record<string, any>, P extends string>(
  obj: T,
  prefix: P
): { [K in keyof T as `${P}${string & K}`]: T[K] } {
  const result = {} as { [K in keyof T as `${P}${string & K}`]: T[K] };
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      result[`${prefix}${key}` as keyof typeof result] = obj[key];
    }
  }
  return result;
}

如果只需要纯JavaScript版本,去掉泛型和类型标注即可直接使用。


使用示例

const originalObj = {
  name: "张三",
  age: 25,
  isAdmin: true
};

const prefixedObj = addPrefixToObjectKeys(originalObj, "user_");
// 新对象自动推导类型为:{ user_name: string; user_age: number; user_isAdmin: boolean }

console.log(prefixedObj.user_name); // 输出:张三
console.log(prefixedObj.user_age); // 输出:25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:06:04