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

简化类数组使用方法求助:避免重复声明类名报错问题

解决数组添加类实例重复写类名的问题

首先,你遇到的"Types Can only be used in .ts files"报错,是因为你用的是标准JavaScript文件,而: ItemModel[]这种类型注解语法属于TypeScript(TS),标准JS并不支持这种写法——那个Unity帖子里的语法是Unity专属的UnityScript,和浏览器/Node.js环境的标准JS不是一回事,所以直接照搬会出错。

接下来给你几个可行的方案,帮你省去每次写new ItemModel()的麻烦:

方案1:给数组添加自定义的add方法

直接给你的ItemsArray加一个封装好的方法,把创建实例和添加到数组的逻辑放在一起:

export class ItemModel {
  constructor(ID, Name) {
    this.ID = ID;
    this.Name = Name;
  }
}

export var ItemsArray = [];

// 给数组挂载自定义添加方法
ItemsArray.add = function(id, name) {
  this.push(new ItemModel(id, name));
};

// 使用时直接调用add方法
ItemsArray.add(0, "BreakFast");
ItemsArray.add(1, "Lunch");
ItemsArray.add(2, "Dinner");

方案2:使用工厂函数

写一个独立的函数来处理创建实例和添加数组的操作,逻辑清晰且不污染原数组:

export class ItemModel {
  constructor(ID, Name) {
    this.ID = ID;
    this.Name = Name;
  }
}

export var ItemsArray = [];

// 专门的工厂函数
function addItemToCollection(id, name) {
  ItemsArray.push(new ItemModel(id, name));
}

// 使用示例
addItemToCollection(0, "BreakFast");
addItemToCollection(1, "Lunch");

方案3:切换到TypeScript(如果允许的话)

如果你可以把文件后缀改成.ts,就能用类型注解,还能通过类的静态方法进一步优化:

export class ItemModel {
  // TS里可以用参数属性简化构造函数
  constructor(public ID: number, public Name: string) {}

  // 静态方法:创建实例并添加到指定数组
  static addTo(array: ItemModel[], id: number, name: string) {
    array.push(new ItemModel(id, name));
  }
}

// TS里可以明确声明数组类型
export let ItemsArray: ItemModel[] = [];

// 使用时更简洁
ItemModel.addTo(ItemsArray, 0, "BreakFast");
ItemModel.addTo(ItemsArray, 1, "Lunch");

这样不仅解决了重复写类名的问题,还能获得类型检查的好处,避免传错参数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:45:32