网站搜索

如何在 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

虽然上述答案完成了它的工作,但它并没有反映出为特定类创建自定义数组的要求。由于你正在学习,我想分享一些我在面向对象编程方面的经验,因为我认为这个解决方案能为你提供更多意义。

  1. 你定义一个类来反映你对数组中对象的要求:

    class MyClass {
        name: string;
        age: number;
    
       constructor(name: string, age: number) {
           this.name = name;
           this.age = age;
       }
    }
    
  2. 您定义了一个扩展 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);
}