2016-12-07 17 views
2

まず、私はオブジェクト指向プログラミングについて全く新しいことを謝ります。この質問を語る良い方法があると確信しています(おそらく検索結果が10になるでしょう) 。typescript基本クラスのオブジェクトプロパティを拡張する

だから私の人生は簡単にするために、私は何をしたいのかを説明するためにここに私はこれを行うにしようとすると、私はエラーを取得するコード

class A { 
    propertyA = { 
    itemA: "a", 
    itemB: "b". 
    itemC: "c" 
    } 
    propertyB = { 
    itemA: "A" 
    } 
} 
class B extends A { 
    propertyA.itemD = "d"; 
    propertyB.itemB = "B"; 
} 

です。私は基本的には基本クラスをテンプレートにして、拡張クラスでいくつかのものをここに拡張する必要があります。そうでなければそれだけで他のすべてのプロパティを必要と

答えて

4

これは、あなたが受け入れ答えはまだ私typescriptです警告ときを与えた

class A { 
    propertyA = { 
    itemA: "a", 
    itemB: "b". 
    itemC: "c" 
    } 
    propertyB = { 
    itemA: "A" 
    } 
} 
class B extends A { 
    constructor(){ 
    super(); 
    this.propertyA.itemD = "d"; 
    this.propertyB.itemB = "B"; 
    } 
} 


var x = new B(); 
console.log(x.propertyA.itemD); 
+1

propertyBとしてpropertyAようと{ itemA: 'A', itemB: 'B' }クラスBの

class A { propertyA: any = { itemA: 'a', itemB: 'b', itemC: 'c' } propertyB: any = { itemA: 'A' } } class B extends A { propertyA: any = { ...this.propertyA, ...{ itemD: 'd' } }; propertyB: any = { ...this.propertyB, ...{ itemB: 'B' } } } 

新しいインスタンスがあります。簡単な答えが必要でした。マークされ、upvoted。 – Akidi

+0

これは私がplain 'javaScriptについて知りません。動的にオブジェクトを拡張する機能 –

2

typescriptですでそれを行う方法です(私は、各クラスのためにそれらを再入力する必要はありません)私のオブジェクトのプロパティを入力します。あなたは完全に親オブジェクトのプロパティを再宣言するためのオプションを持っている場合は、次のようにあなたは、property does not exist on type警告を抑制することができます:あなたは、彼らが宣言されているときのプロパティを初期化する代わりに、コンストラクタでない場合や

class A { 

    propertyA: { 
    itemA: string 
    } = { 
    itemA: '123' 
    }; 

} 

class B extends A { 

    propertyA: { 
    itemA?: string, // Need to re-declare this 
    itemB?: string 
    } = { 
    itemA: '123', // Need to re-initialise this 
    itemB: '456' 
    }; 

} 

これは最高の作品可能であれば他の方法。これは、あなたがAは、あなたが具体的に上書きしない限りにプロパティを初期化するものクラス知る必要がないことを意味します。これは、それを解決する正しい方法があるが、これは私がなってしまった場合は、どうしたら

class A { 

    propertyA: { 
    itemA?: string 
    } = {}; 

    constructor() { 
    this.propertyA.itemA = '123'; // Now we don't need to do this in derived classes 
    } 

} 

class B extends A { 

    propertyA: { 
    itemA?: string, // Need to re-declare this 
    itemB?: string 
    } = {}; 

    constructor() { 
    super(); 
    this.propertyA.itemB = '456'; 
    } 

} 
0

わかりません:*ため息*私はそれは途方もなく簡単に何かをするつもりだった知っていた{ itemA: 'a', itemB: 'b', itemC: 'c', itemD: 'd' }

関連する問題