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

如何为添加/替换键值的对象复制函数添加实用泛型类型?

实现泛型化的extend函数

当然可行,你可以通过TypeScript的泛型与索引类型直接实现这个需求,无需依赖内置工具类型。

泛型化后的函数实现

function extend<T extends object, K extends string, V>(
  obj: T,
  key: K,
  value: V
): Omit<T, K> & { [P in K]: V } {
  return { ...obj, [key]: value } as Omit<T, K> & { [P in K]: V };
}

类型参数说明

  • T extends object:约束第一个参数obj为任意对象类型,调用时会自动推断传入对象的具体类型
  • K extends string:约束第二个参数key为字符串字面量类型,确保调用时传入的是具体的常量字符串
  • V:第三个参数value的类型,调用时自动推断传入值的类型

返回类型逻辑

返回类型Omit<T, K> & { [P in K]: V }的作用是:

  1. 用Omit<T, K>移除原对象obj中K键对应的旧类型
  2. 通过交叉类型&添加新的K键类型V,实现对原有键类型的覆盖,无论新旧类型是否一致

使用示例

// 覆盖已有键(类型不同)
const user = { name: "Alice", age: 25 };
const updatedUser = extend(user, "age", "二十五");
// updatedUser 的类型为:{ name: string; age: string }

// 添加新键
const product = { id: 101, name: "Laptop" };
const updatedProduct = extend(product, "price", 5999);
// updatedProduct 的类型为:{ id: number; name: string; price: number }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:18