2016-02-05 59 views
2

如何將此簡單JavaScript轉換爲正確的打字稿語法,使用帶有「添加」方法的類?如何加載打字稿中的對象數組

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

我想出如何至少定義一個變量,但我不能使用「添加」方法來加載它:

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); 
} 

回答

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); 
        } 
    } 
    

T意味着你定義一個通用的陣列可以容納任何類當你創建它,你會提供。此外,您還可以使用方法add擴展JavaScript數組類型。

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

當你在創造一個新的要添加MyClass作爲一個類型參數見。之後,您可以添加MyClass類型的對象。

0

我認爲你應該使用一個構造函數,而不是一個方法,並與環內新的關鍵字創建新實例:

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); 
} 
+0

Ufuk - 你有我如何修改上述代碼來做到這一點的樣本? – Lambert

+0

@Lambert你是什麼意思? –

+0

哦,我沒有看到你的改變。不過,我仍然希望有一個「添加」方法。如果代碼變得太羅嗦,我可能會最終使用「推」的方式。 – Lambert

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); 
}