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

TypeScript如何声明泛型函数返回类型:给输入对象数组每一项新增id属性

你可以用 TypeScript 泛型 + 交叉类型实现需求,同时还可以增加类型约束避免入参对象本身携带id属性产生冲突。

实现代码

// 基础版:任意对象数组都可传入,返回追加id属性的数组
const pickIdAndDocs = <T extends object>(arr: T[]): (T & { id: number })[] => {
  return arr.map(doc => ({
    id: 1, // 若id实际为其他类型,修改此处类型定义即可
    ...doc
  }))
}

// 增强约束版:要求入参对象不能自带id属性,避免属性覆盖的潜在问题
const pickIdAndDocs = <T extends { id?: never }>(arr: T[]): (T & { id: number })[] => {
  return arr.map(doc => ({
    id: 1,
    ...doc
  }))
}

这里的&是 TypeScript 的交叉类型运算符,作用是合并两个类型的所有属性,刚好符合你需要「扩展入参类型追加id属性」的需求。

使用示例

用你给出的iUser类型测试:

interface iUser {
  name: string;
}
const users: iUser[] = [ {name: "John"}, {name: "Joe"} ];

// 返回值的类型会自动推导为 ({ id: number } & iUser)[]
const usersWithId = pickIdAndDocs(users);
// 可以正常访问id和name属性,TS不会抛出类型错误
console.log(usersWithId[0].id);
console.log(usersWithId[0].name);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:15:04