如何在 TypeScript 中加载对象数组
如何将这个简单的 JavaScript 转换为使用具有“Add”方法的类的正确 TypeScript 语法?
var i, rec;
var myArray = [];
for (i = 0; i < 10; i++) {
rec = { name: "john", age: i };
myArray.push(rec);
}
我弄清楚了至少如何定义一个变量,但我不能使用“Add”方法来加载它:
var myArray: { name: string; age: number }[] = [];
这是我在一个类上尝试的 Add 方法,虽然很可怜:
class MyClass {
name: string;
age: number;
add(inArg1: string, inArg2: number) {
this.name = inArg1;
this.age = inArg2;
}
}
var myArray= new Array<MyClass>();
for (i = 0; i < 10; i++) {
myArray.add("john", i);
}
答案#1
虽然上述答案完成了它的工作,但它并没有反映出为特定类创建自定义数组的要求。由于你正在学习,我想分享一些我在面向对象编程方面的经验,因为我认为这个解决方案能为你提供更多意义。
你定义一个类来反映你对数组中对象的要求:
class MyClass { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } }您定义了一个扩展 JavaScript 数组类型的自定义数组。
class MyArray<T> extends Array<T> { add(element: T) { this.push(element); } }
T 意味着你定义了一个通用数组,它可以在创建时保存你提供的任何类。此外,你用一个方法 add 扩展了 JavaScript 数组类型。
let array = new MyArray<MyClass>();
array.add(new MyClass('Ford', 20));
正如你在创建新的 MyArray 时所看到的,你正在将 MyClass 作为类型参数添加。之后,你可以添加 MyClass 类型的对象。
答案#2
我认为你应该使用构造函数而不是方法,并在循环内使用 new 关键字创建新实例:
class MyClass {
name: string;
age: number;
add(inArg1: string, inArg2: number) {
this.name = inArg1;
this.age = inArg2;
}
}
var myArray= new Array<MyClass>();
for (var i = 0; i < 10; i++) {
var myClass = new MyClass();
myClass.add('john',i);
myArray.push(myClass);
}
