如何在typescript中加载对象数组

时间:2016-02-05 19:26:11

标签: typescript

如何使用带有" Add"的类将这个简单的javascript转换为正确的打字稿语法?方法

log_a[n] = x[n] + log_a[n-1] + log( 1 + exp(-2*x[n] + log_b[n-1]-log_a[n-1] ) )

我想出了如何至少定义一个变量,但我不能使用" Add"加载它的方法:

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 }[] = [];

3 个答案:

答案 0 :(得分:0)

我认为你应该使用构造函数而不是方法,并在循环中使用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);
}

答案 1 :(得分:0)

虽然上面的答案确实起到了作用,但它并没有反映出为特定类提供自定义数组的要求。在您学习的过程中,我想分享一些我在OOP方面的经验,因为我认为这个解决方案为您提供了更多的意义。

  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);
        }
    }
    
  3. T表示您定义一个通用数组,该数组可以包含您在创建它时将提供的任何类。此外,您使用方法add扩展JavaScript数组类型。

    let array = new MyArray<MyClass>();
    array.add(new MyClass('Ford', 20));
    

    正如您在创建新MyArray时所看到的那样,您正在添加MyClass作为类型参数。之后,您可以添加MyClass类型的对象。

答案 2 :(得分:0)

这不是我原来问题的最佳答案,但这是我最终使用的结果,因为对我而言,这是一种不那么复杂的方式。这是一个加载包含嵌套对象数组的对象数组的示例,这是我工作的大多数项目通常都有的。

interface mySubRecord {
    eyeColor: string;
    weight: number;
}

interface myRecord {
    name: string;
    age: number;
    more: mySubRecord[];
}

var i: number, rec: myRecord, subRec: mySubRecord[];
var myArray: myRecord[] = []; //Weird syntax here.

subRec = [{ eyeColor: "brown", weight: 118 }];

for (i = 0; i < 10; i++) {
    rec = { name: "john", age: i, more: subRec };
    myArray.push(rec);
}