如何使用带有" 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 }[] = [];
答案 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方面的经验,因为我认为这个解决方案为您提供了更多的意义。
您定义了一个反映您对数组中对象的要求的类:
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 :(得分: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);
}