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

TypeScript中如何定义接收未知形状对象数组的函数?

更优的TypeScript实现方案

直接用any确实不是最佳选择——它会完全丢失TypeScript的类型检查能力,没法利用类型系统带来的提示和错误预警。针对你这个复制任意对象数组的需求,泛型是更合适的方案,既能保留类型信息,又能支持任意形状的对象。

实现代码

const copyData = <T>(items: T[]): T[] => {
  const myData = items.slice();
  return myData;
};

为什么这更好?

  • 泛型T会自动推断传入数组的元素类型,比如你传入[{id: 1, name: "Tom"}, {id: 2, age: 30}],TypeScript会自动识别T为{id: number, name: string} | {id: number, age: number},返回的数组也会保持这个类型。
  • 后续操作myData或者返回值时,你能得到完整的类型提示,比如访问myData[0].id会被TS识别为number类型,要是写错属性名(比如写成idd)会直接报错,这是any做不到的。
  • 完全兼容任意形状的对象数组,不需要为不同类型的对象写多个函数,复用性拉满。

额外提示

如果你的myData是函数外部的变量,也应该给它加上泛型类型声明,比如:

let myData: T[];
const copyData = <T>(items: T[]): void => {
  myData = items.slice();
};

不过更推荐把myData放在函数内部作为局部变量,避免全局变量带来的类型混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:33:57