简化类数组使用方法求助:避免重复声明类名报错问题
解决数组添加类实例重复写类名的问题
首先,你遇到的"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
相关产品推荐
相关产品推荐

