javascript - 使用类数组的更简单方法
问题描述
我有一个类,然后定义了一个类的数组,每次我想向数组中添加一个节点时,我不得不提到我不喜欢的类名:
export class ItemModel {
constructor(
ID,
Name
) {
this.ID = ID;
this.Name = Name;
}
}
export var ItemsArray = [];
ItemsArray.push(new ItemModel(0, "BreakFast"));
ItemsArray.push(new ItemModel(1, "Lunch"));
ItemsArray.push(new ItemModel(2, "Dinner"));
看完这篇文章后:
https://answers.unity.com/questions/637902/how-to-use-javascript-array-with-classes.html
我试图在定义数组时声明类,如下所示:
var ItemsArray : ItemModel[];
但我收到错误:“类型只能在 .ts 文件中使用。
我搜索了谷歌,但没有一个是有帮助的。
任何建议将不胜感激。
解决方案
您链接到的帖子是使用TypeScript,它是一种与 JavaScript 不同的语言:它是 JavaScript 的超集(可编译为 JavaScript),它添加了静态类型(以及一些其他功能,如构造函数中的自动属性初始化)。
此 TypeScript 行:
var ItemsArray : ItemModel[];
相当于这个 JavaScript:
var ItemsArray;
只是 TypeScript 版本声明ItemsArray
变量具有静态类型 ItemModel[]
。
如果您使用 JavaScript 本身,则无需定义变量的类型。你export var ItemsArray = [];
的很好(除了我会使用let
orconst
代替var
)。
旁注:您可以使用数组初始化器在 JavaScript 中更简洁地编写该数组:
export const ItemsArray = [
new ItemModel(0, "BreakFast"),
new ItemModel(1, "Lunch"),
new ItemModel(2, "Dinner")
];
这也是有效的 TypeScript,即使没有类型声明:TypeScript 会推断出您想要的类型(因为 TypeScript 会ItemsArray
进行类型推断并且它可以看到您正在填充对象)。ItemModel[]
ItemsArray
ItemModel
如果你想从一个空数组开始但仍然给它一个静态类型,你可以这样做:
// /------ Telling TypeScript to use ItemModel[]
// vvvvvvvvvvvvv as the type
export const ItemsArray : ItemModel[] = [];
// ^^^^^-- Initializing ItemsArray with an
// empty array
然后你的push
电话会被类型检查,所以这会起作用:
ItemsArray.push(new ItemModel(0, "BreakFast"));
但这会导致错误(在 TypeScript->JavaScript 编译期间)
ItemsArray.push("BreakFast");
因为"Breakfast"
不兼容ItemModel
。
旁注 2:JavaScript(和 TypeScript)中压倒性的约定是变量以小写字母开头,而不是大写字母。所以itemsArray
而不是ItemsArray
.
推荐阅读
- angular - 调用本地 json 文件时找不到类型为“object”的不同支持对象“[object Object]”
- html - 输入:有效无效 - 尚未聚焦,但标签已在顶部
- autodesk-forge - 查看器中启用悬停的子上下文菜单
- angularjs - AngularJS 与 Salesforce
- c# - 如何使用输入参数而不是占位符格式化字符串
- java - 如何使用java重命名soap Web服务响应中字符串数组的父标记
- linux - Linux LS 命令不能与 * 正则表达式量词一起正常工作
- python - 在视频流的帧中找到闭合角度的坐标
- mysql - MySQL 8 不检测选择不同查询中的功能依赖关系
- google-maps - 我有以下代码,它说无法解析符号 mMap()。我该怎么办?