2017-09-07 26 views
0

私のAngular 4プロジェクトでTypeScriptの構文に問題があります。 私のような通常のクラス、作成する場合:私のクラスのインスタンスメソッドがあるのでTypeScript構文のエラー:メソッド付き宣言配列

myclassarray: MyClass[] = [{ 
    field1: 'hello', 
    field2: 3, 
    field3: false 
}]; 

ない:

export class MyClass { 
    field1: string; 
    field2: number; 
    field3: boolean; 

    myMethod() { 
    this.field2 = this.field2 + 2; 
    } 
} 

を、私はこの構文を持つMyClassの要素の配列を宣言することはできません静的メソッド。 質問は:どのように私にとって有用な非静的メソッドを含む要素の配列を宣言することができますか?

また、宣言的な方法でこれらの項目を初期化できる構文もわかりません。

+0

静的メソッドを使用してからあなたを停止していますか? – msanford

+0

私のクラスインスタンスのデータフィールドを変更するメソッドが必要なので – claudioz

+0

言語の問題か、問題がOOPの原則を理解していないのですか?メソッドでオブジェクトの配列が必要な場合は、 'new MyClass()'構文を使用する必要があります。プロパティを初期化する場合は、コンストラクタを使用します。プロパティが多すぎる場合は、コンストラクタを使用して、コンストラクタ(コンストラクタ(dto:MyClassInterface){this = Object.assign({}、dto);})を使用します。 –

答えて

3

あなたはMyClassのインスタンスにオブジェクトリテラルを割り当てるObject.assignを使用することができます。

myclassarray: MyClass[] = [ 
    Object.assign(new MyClass(), { 
     field1: 'hello', 
     field2: 3, 
     field3: false 
    }) 
]; 
-1

は、最初のMyClassのオブジェクトを作成し、値はその配列にプッシュintializeする必要があります。

myclassarray: Array<MyClass> = []; 
myClass: MyClass = new MyClass(); 
    myClass.field1 =''; 
    myClass.field2 =1; 
    myClass.field3 = false; 


myclassarray.push(myClass); 
0

あなたはクラスを使用しているので、なぜコンストラクタを使用しないのですか?

class MyClass { 
    constructor(public field1: string, public field2: number, public field3: boolean) {} 

    myMethod() { 
     this.field2 = this.field2 + 2; 
    } 

    show() { 
     console.log(this.field2); 
    } 
} 

let myclassarray = new MyClass(
    'hello', 3, false 
); 

あなたはそのようにようにそれらを呼び出すことができます。

myclassarray.myMethod(); 
myclassarray.show(); // logs 5